1

所以我有这个非常简单的代码,它读取一个文件并以十六进制查看器的方式吐出它的数据。这里是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace HexViewer
{
    class Program
    {
        static void Main(string[] args)
        {
            BinaryReader br = new BinaryReader(new FileStream("C:\\dump.bin", FileMode.Open)); 
            for (int i = 0; i < br.BaseStream.Length; i+= 16)
            {
                Console.Write(i.ToString("x") + ": ");
                byte[] data = new byte[16];
                br.Read(data, i, 16);
                Console.WriteLine(BitConverter.ToString(data).Replace("-", " "));
            }
            Console.ReadLine();
        }
    }
}

问题是在第一次迭代之后,当我这样做时

br.Read(data, 16, 16);

字节数组填充 16 个字节,然后填充文件第 15 字节到第 31 字节的数据。因为它无法将 32 字节放入 16 字节的大数组中,所以它会引发异常。您可以对任何大于 16 字节的文件尝试此代码。所以,问题是,这段代码有什么问题?

4

1 回答 1

3

只需更改br.Read(data, i, 16);br.Read(data, 0, 16);

您每次都在读取一个新的数据块,因此无需使用i缓冲区data

更好的是,改变:

byte[] data = new byte[16];
br.Read(data, 0, 16);

到:

var data = br.ReadBytes(16);
于 2013-05-18T12:28:22.173 回答