使用Hex Editor
请参阅本文件:为什么我的2个字节(0x00 0x40)应该是64而不是16384?
我读了2个字节是这样的:
BinaryReader binaryReader;
int wlen = binaryReader.ReadUInt16();
当我读到这2个字节我BinaryReader.BaseStream.Position
为14
,但wlen = 16384
这应该是64.我做错了什么?
使用Hex Editor
请参阅本文件:为什么我的2个字节(0x00 0x40)应该是64而不是16384?
我读了2个字节是这样的:
BinaryReader binaryReader;
int wlen = binaryReader.ReadUInt16();
当我读到这2个字节我BinaryReader.BaseStream.Position
为14
,但wlen = 16384
这应该是64.我做错了什么?
binaryReader.ReadUInt16()
使用little endian进行读取。
参见:https://msdn.microsoft.com/en-us/library/system.io.binaryreader.readuint16(v=vs.110).aspx
你的数据文件似乎是由一些big-endian刻录机上生产,而BinaryReader
读取数据assuming the little-endian representation。
如果您可以控制文件的格式,那么更改编写器以生成小尾数表示可以让您避免更改C#程序。
也有几种方式可以读取.NET中的big-endian数据。你可以使用BitConverter
,但手动扭转字节可能是最高效的一个:
我会给你一个提示... 0x4000的== 16384,需要交换的字节数。 –
显示*真实*代码。这个片段只会产生一个'NullReferenceException'。 –
@Ron说了什么。在开始解析任意字节之前,了解字节顺序。 – CodeCaster