我正在尝试编写一些独立于处理器的代码来以大端格式编写一些文件。我在下面有一个代码示例,但我不明白为什么它不起作用。它应该做的就是让字节以大端顺序一个一个地存储数据的每个字节。在我的实际程序中,我会将单个字节写入文件,因此无论处理器架构如何,我都会在文件中获得相同的字节顺序。
#include <iostream>
int main (int argc, char * const argv[]) {
long data = 0x12345678;
long bitmask = (0xFF << (sizeof(long) - 1) * 8);
char byte = 0;
for(long i = 0; i < sizeof(long); i++) {
byte = data & bitmask;
data <<= 8;
}
return 0;
}
由于某种原因,字节的值始终为 0。这让我感到困惑,我正在查看调试器并看到以下内容:
数据 = 00010010001101000101011001111000 位掩码 = 11111111000000000000000000000000
我认为数据和掩码会给出 00010010,但它每次只会产生 00000000 字节!他怎么可能?我已经为小端顺序编写了一些代码,效果很好,见下文:
#include <iostream>
int main (int argc, char * const argv[]) {
long data = 0x12345678;
long bitmask = 0xFF;
char byte = 0;
for(long i = 0; i < sizeof(long); i++) {
byte = data & bitmask;
data >>= 8;
}
return 0;
}
为什么小端不工作而大端不工作?谢谢你的帮助 :-)