C# - 算术溢出 - 通过gzipstream对字符串进行解压缩

时间:2017-06-27 11:39:40

标签: c# gzipstream

我遇到了实现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));
            }
        }
    }
}

有人可以解释为什么会发生这种情况以及如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

BitConverter.ToInt32(buffer, 0)产生负值,对于数组分配无效。