【发布时间】:2023-05-12 11:16:01
【问题描述】:
下面的代码在不同的系统上给了我不同的输出:
int fd = open(filename, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG | S_IRWXO);
byte_t data[] = { 0x00, 0x01, 0x02, 0x03, 0x0a, 0x0b 0x0c, 0x0d };
write(fd, data, sizeof(data));
在 mac 上,文件名的“hexdump”给出了我的预期
00 01 02 03 0a 0b 0c 0d
在 Ubuntu 和 Windows 上(代码不同但效果相同)你会得到
01 00 03 02 0b 0a 0d 0c
我想要打印平台
00 01 02 03 0a 0b 0c 0d
那我应该怎么做呢?
【问题讨论】:
-
“byte_t”是跨两个平台的一致数据类型吗?
-
“代码不同”?请向我们展示实际代码,而不是一些近似值。
-
我认为您显示的代码不太可能按照您在 any 平台上描述的方式运行(无论字节顺序如何)。请附上 SSCCE (sscce.org)。
-
看起来像 ENDIANNESS 问题。虽然不是很典型。看看这些IMB write endian independent code 和some random doc I found on google
-
感谢你们的帮助,我最终学到了更多关于可能的字节顺序问题的知识。