2011-08-24 83 views
1

我对特定的BinaryReader操作感到困惑。BinaryReader.ReadInt32结果与输入文件相比意外,为什么?

使用十六进制编辑器(UltraEdit)查看二进制文件时,前四个字节是:52 62 38 11

当在BinaryReader上迭代同一个文件时,如果我先调用ReadInt32(),我预计int值为1,382,168,593。

.ReadInt32():从当前流中读取一个4字节的带符号整数,并将流的当前位置提前四个字节。

取而代之,我得到288,907,858。

显然我错过了一些明显的东西......任何人都可以解释发生了什么?

回答

11

BinaryReader以little-endian顺序读取字节。

观察:

csharp> 0x52623811; // What you expected it to read. 
1382168593 
csharp> 0x11386252; // What it actually read. 
288907858 

如果需要指定要读取数据的字节顺序,我建议使用Mono.DataConvert。我已经在几个项目中使用过它,它非常有用,也是麻省理工学院许可的。 (由于性能原因,它使用不安全的代码,所以不能在不可信的上下文中使用它。)

有关该概念的更多信息,请参阅the Wikipedia article on endianness

对BinaryReader在

实施