我遇到了实现GZIP字符串解压缩程序的问题。压缩的字符串是 a20d32fdda14b300b28aa6b72982af3b ,如下所示。但是,运行此代码时,我收到错误:
发生了System.OverflowException
的HResult = 0x80131516
消息=算术运算导致溢出
堆栈跟踪:
在GZipDecompressor.Decompress.Main(String [] args)
“
执行以“byte [] buffer2”
开头的行using System;
using System.IO;
using System.IO.Compression;
using System.Text;
namespace GZipDecompressor
{
class Decompress
{
public static void Main(string[] args)
{
string compressedText = "a20d32fdda14b300b28aa6b72982af3b";
int length = compressedText.Length;
byte[] buffer = Convert.FromBase64String(compressedText);
using (MemoryStream stream = new MemoryStream())
{
stream.Write(buffer, 4, buffer.Length - 4);
byte[] buffer2 = new byte[BitConverter.ToInt32(buffer, 0)];
stream.Position = 0;
using (GZipStream stream2 = new GZipStream(stream, CompressionMode.Decompress))
{
stream2.Read(buffer2, 0, buffer2.Length);
}
Console.WriteLine(Encoding.UTF8.GetString(buffer2));
}
}
}
}
有人可以解释为什么会发生这种情况以及如何解决这个问题。
答案 0 :(得分:2)
BitConverter.ToInt32(buffer, 0)
产生负值,对于数组分配无效。