此问题在此处已有答案:
Why the byte are upside down?(5个答案)
昨天关门了。
我有一个二进制文件,包含以下数据:
00e0 a248 6000 611e 6200 d202 d212 7208
3240 120a 6000 613e 6202 a24a d02e d12e
...
当我使用ReadFile()
并将目标缓冲区设置为uint8_t
数组时,写入的缓冲区数据与源文件数据匹配:
uint8_t rom[256];
ReadFile(_, rom, _, NULL, NULL);
// in rom
rom[0x00000000] 0x00
rom[0x00000001] 0xe0
rom[0x00000002] 0xa2
rom[0x00000003] 0x48
rom[0x00000004] 0x60
rom[0x00000005] 0x00
rom[0x00000006] 0x61
...
为什么当我使用ReadFile()
和uint16_t
数组时,每个元素的字节都写反了?
uint16_t rom[256];
ReadFile(_, rom, _, NULL, NULL);
// in rom
rom[0x00000000] 0xe000
rom[0x00000001] 0x48a2
rom[0x00000002] 0x0060
rom[0x00000003] 0x1e61
rom[0x00000004] 0x0062
rom[0x00000005] 0x02d2
rom[0x00000006] 0x12d2
...
同样的模式似乎也存在于较大的类型中:
uint32_t rom[256];
ReadFile(_, rom, _, NULL, NULL);
// in rom
rom[0x00000000] 0x48a2e000
rom[0x00000001] 0x1e610060
rom[0x00000002] 0x02d20062
rom[0x00000003] 0x087212d2
rom[0x00000004] 0x0a124032
rom[0x00000005] 0x3e610060
rom[0x00000006] 0x4aa20262
...
ReadFile()
的文档似乎没有提到任何有关此行为的内容
1条答案
按热度按时间pkwftd7m1#
ReadFile()
对你要阅读的缓冲区类型没有概念,它只读取原始字节,而且它确实保留了字节的顺序。多字节整数(
uint16_t
为2字节,uint32_t
为4字节)受endian约束(即,字节顺序),这就是你所经历的。2字节本身没有被反转。3整数的 * 值 * 取决于字节被 * 解释 * 的 * 顺序 *。相同的字节序列可以表示不同的数值,具体取决于字节是按little endian还是big endian字节顺序解释的。例如,2字节序列
00 e0
表示53744
(十六进制0xE000)的小端值和224
(十六进制0x00E0)的大端值。