【发布时间】:2010-10-28 07:25:31
【问题描述】:
我正在尝试使用 BinaryReader 类读取二进制文件,我需要将其作为 UInt32 块读取,然后进行一些位移等后记。
但是,由于某种原因,当我使用 ReadUInt32 方法时,位顺序颠倒了。
例如,如果我有一个文件,其中前四个字节在十六进制中看起来像这样,0x12345678,它们在被 ReadUInt32 读取后最终是这样的:0x78563412。
如果我使用 ReadBytes(4) 方法,我会得到预期的数组:
[0x00000000] 0x12 byte
[0x00000001] 0x34 byte
[0x00000002] 0x56 byte
[0x00000003] 0x78 byte
这是为什么?它只是 .net 表示内存中的 uint 的方式吗?在不同平台上是否相同(我运行的是 64 位 Windows 7、.net 3.5 sp1)?
【问题讨论】:
-
你能告诉我们你是如何解决它的吗? :)
-
当然 :) 实际上,字节顺序是哪种方式并不重要,只要它跨平台(x64,x86)一致,我仍然可以提取我需要的位,我只是必须改变我的位移。据我所知,uint 通常存储为 little-endian,而不仅仅是由 ReadUInt32 构建的 uint,因此这让一切变得更容易。
标签: .net 64-bit bit-manipulation 32-bit endianness