BinaryReader.ReadInt32与输入文件相比意外结果,为什么?

JYe*_*ton 1 c# binaryreader

我对特定的BinaryReader操作感到困惑.

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

当使用a迭代同一个文件时BinaryReader,如果我ReadInt32()先调用,我希望int值为1,382,168,593.

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

相反,我得到288,907,858.

很明显,我错过了一些明显的东西......谁能解释一下发生了什么?

cdh*_*wie 11

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

注意:

csharp> 0x52623811;  // What you expected it to read.
1382168593
csharp> 0x11386252;  // What it actually read.
288907858
Run Code Online (Sandbox Code Playgroud)

如果您需要指定正在读取的数据的字节顺序,我建议使用Mono.DataConvert.我已经在几个项目中使用它,它非常有用,以及麻省理工学院许可.(出于性能原因,它确实使用了不安全的代码,因此您无法在不受信任的上下文中使用它.)

有关该概念的更多信息,请参阅Wikipedia关于字节序的文章.

有关BinaryReader实现的详细信息,请参阅Microsoft的参考源