【发布时间】:2013-05-18 20:28:22
【问题描述】:
所以我有这个非常简单的代码,它可以读取文件并以十六进制查看器的方式将其数据吐出。这里是:
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 字节的文件尝试此代码。那么问题来了,这段代码有什么问题呢?
【问题讨论】:
-
我会说
br.Read(data, i, 16)中的i。这不应该是0吗? -
我同意@DeCaf。索引不是在要读取的数据中引用,而是在输出数组中的索引。在这种情况下,数据应始终写入输出数组的开头,因此值应为 0。
-
谢谢!现在效果非常好!