我试图将一个 dword 转换为 4 个字节的数组。当我这样做时,字节似乎会翻转(改变字节顺序)
据我了解,在小端系统上等于 0x11223344 的 dword 将如下所示:
0000_1011___0001_0110___0010_0001____0010_1100
但是当我这样做时:
typedef unsigned long dword;
typedef unsigned char byte;
int main(void)
{
dword a = 0x11223344;
byte b[4];
memcpy(b, &a, 4);
printf("%x %x %x %x\n", b[0], b[1], b[2], b[3]);
}
我得到44 33 22 11。
我预计它是11 22 33 44。
当我使用 reinterpret_cast 或
union
{
dword a;
byte b[4];
} foo;
我猜我错了,而不是编译器/处理器,但是我在这里缺少什么?另外,这在大端系统上看起来如何?
编辑:所以我想我对小端系统的理解是错误的。另一个问题:哪个会更快,同时仍然是可移植的:使用移位来获取单个字节值或使用 memcpy/reinterpret_cast 然后使用 htonl()/ntohl()?