所以我有这个非常简单的代码,它读取文件并以十六进制查看器方式将其数据吐出。这是:
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个字节的任何文件尝试此代码。所以,问题是,这段代码出了什么问题?
答案 0 :(得分: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);