在C#中解压缩字节数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C#中解压缩字节数组相关的知识,希望对你有一定的参考价值。
我正在使用EBICS协议,我想读取XML文件中的数据以与另一个文件进行比较。
我已经使用Convert.FromBase64String(OrderData);
但现在我有一个字节数组。
要阅读内容,我必须将其解压缩。我试图像下面的示例一样使用Gzip解压缩它:
static byte[] Decompress(byte[] data)
using (var compressedStream = new MemoryStream(data))
using (var zipStream = new GZipStream(compressedStream, CompressionMode.Decompress))
using (var resultStream = new MemoryStream())
zipStream.CopyTo(resultStream);
return resultStream.ToArray();
但是它不起作用,我有一条错误消息:
gzip标头中的魔术数字不正确。确保您正在传递gzip流
现在我不知道如何解压缩,请帮助我!
谢谢!
OP在对另一个答案的注释中提供的前四个字节:0x78 0xda 0xe5 0x98
是zlib流的开始。它既不是gzip,也不是zip,而是zlib。您需要ZlibStream
,由于某种原因Microsoft不提供。不过很好,因为what Microsoft does provide is buggy。
您应该使用提供DotNetZip的ZlibStream
,并且可以使用。
尝试使用SharpZipLib。它可以处理各种压缩格式,并且根据GPL许可是免费的。
正如其他人指出的,我怀疑您有一个zip流而不是gzip。如果在十六进制视图中检查前4个字节,则ZIP文件始终以0x04034b50 ZIP File Format Wiki开头,而GZIP文件始终以0x8b1f GZIP File Format Wiki]开头
我想我终于明白了-像往常一样,问题不在标题中。幸运的是,我在您的帖子中注意到了EBICS这个词。因此,根据EBICS规范,首先对数据进行压缩,然后进行[[encrypted]],最后进行base64编码。如您所见,在对base64进行解码之后,您需要先decrypt
以上是关于在C#中解压缩字节数组的主要内容,如果未能解决你的问题,请参考以下文章