当使用 System.IO.BinaryReader 读取二进制文件时,使用任何多字节读取方法时字节顺序似乎不受影响。
BinaryReader br = new BinaryReader(fs, System.Text.Encoding.BigEndianUnicode);
和
BinaryReader br = new BinaryReader(fs, System.Text.Encoding.Unicode);
正在为我产生相同的结果。
这让我很沮丧,因为我在读取数据结构时必须不断地颠倒字节顺序。
Screenshot - Big Endian Unicode
Screenshot - Little Endian Unicode
我已经在 .NET 3 到 4.5 上对此进行了测试
最佳答案
BinaryReader
仅在处理 string
数据时使用 Encoding
(几乎就是 ReadString()
)。 ReadBytes
等不涉及Encoding
- 它只是读取二进制数据。由于您只调用 ReadBytes
,因此永远不会查看此 (Encoding
)。
如果数据乱序,则听起来该文件不是使用 BinaryWriter
创建的。如果它不是用 BinaryWriter
创建的,那么 BinaryReader
可能就没那么有用了——你可以只使用 Stream
。
关于c# - .NET BinaryReader 不遵守编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12907677/