主题.与输入文件相比,ReadInt32结果异常,为什么?
本文关键字:ReadInt32 结果 为什么 异常 输入 文件 主题 | 更新日期: 2023-09-27 18:06:30
我对一个特定的BinaryReader
操作感到困惑。
当使用十六进制编辑器(UltraEdit)查看二进制文件时,前四个字节是:52 62 38 11
.
当使用BinaryReader
迭代同一文件时,如果我先调用ReadInt32()
,我将期望int值为1,382,168,593。
.ReadInt32()
:从当前流中读取一个4字节的有符号整数,并将当前流的位置移动4个字节。
结果是288,907,858。
显然我错过了一些明显的…有人能解释一下这是怎么回事吗?
BinaryReader
按小端顺序读取字节
观察:
csharp> 0x52623811; // What you expected it to read.
1382168593
csharp> 0x11386252; // What it actually read.
288907858
如果您需要指定正在读取的数据的字节顺序,我建议使用mono_dataconvert。我在几个项目中使用过它,它非常有用,而且是麻省理工学院授权的。(由于性能原因,它确实使用不安全的代码,因此您不能在不受信任的上下文中使用它。)
关于这个概念的更多信息,请参阅维基百科关于端序的文章。
有关BinaryReader实现的详细信息,请参阅Microsoft的参考源代码
Intel架构是小端序的。序列中的最后一个字节具有最大值。所以52 62 38 11等于0x11386252