BinaryReader通过填充字节数组压倒了我

本文关键字:数组 字节数 填充 字节 BinaryReader | 更新日期: 2023-09-27 18:14:08

所以我有这段非常简单的代码,读取文件并以十六进制查看器的方式输出其数据。

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字节的文件尝试此代码。问题是,这段代码出了什么问题?

BinaryReader通过填充字节数组压倒了我

br.Read(data, i, 16);改为br.Read(data, 0, 16);

每次都读取一个新的数据块,因此不需要为data缓冲区使用i

更好,改成:

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

:

var data = br.ReadBytes(16);