.NET BinaryReader不遵守编码

Jon*_*gel 3 .net c# unicode binary endianness

使用System.IO.BinaryReader读取二进制文件时,使用任何多字节读取方法时,字节顺序似乎不受影响.

BinaryReader br = new BinaryReader(fs, System.Text.Encoding.BigEndianUnicode);
Run Code Online (Sandbox Code Playgroud)

BinaryReader br = new BinaryReader(fs, System.Text.Encoding.Unicode);
Run Code Online (Sandbox Code Playgroud)

正在为我产生相同的结果.

这让我很沮丧,因为我必须在读取数据结构时不断反转字节顺序.

截图 - Big Endian Unicode

截图 - Little Endian Unicode

我已经在.NET 3到4.5上测试了这个

Mar*_*ell 8

BinaryReader只使用Encoding处理string数据时(几乎就是这样ReadString()).ReadBytes等不涉及Encoding- 它只是读取二进制数据.由于你只打电话ReadBytes,这个(Encoding)永远不会看到.

如果数据是乱序的,那么听起来好像没有创建文件BinaryWriter.如果不是与创建BinaryWriter那么BinaryReader可能不是那么有用-你可以只使用Stream.

  • 如果您知道格式,那么类似BinaryReader的类仍然很有用 - 但是如果您需要切换字节序,那么EndianBinaryReader就是您想要的,来自MiscUtil :) (2认同)