复制有关字节序的整数内容

时间:2014-01-08 16:01:57

标签: c++ c c++11

我想要做的事实上应该很简单,但我不知道如何以一种简单的方式实现它:

我想将无符号整数(32位)的值复制到无符号字符数组。 数组中的表示必须始终为little endian。

在一个小端架构上,我可以很简单地做到:

unsigned char array[sizeof(unsigned int)];
unsigned int i = 12345;
memcpy(array, &i, sizeof(unsigned int));

表示将以小尾数表示。 在大端架构上实现这一目标的最佳方法是什么? 我如何在我的代码中找出我的架构的endianess?

我的项目使用C ++ 11标准。

提前致谢!

1 个答案:

答案 0 :(得分:8)

您不想“复制”内部表示 unsigned int;您想将其格式化为指定的外部 表示。这相对容易:

*dest ++ = (i      ) & 0xFF;
*dest ++ = (i >>  8) & 0xFF;
*dest ++ = (i >> 16) & 0xFF;
*dest ++ = (i >> 24) & 0xFF;
毕竟,这是一个32位小端的定义 表示。

有符号整数可能更复杂,因为有不同 负数的表示,浮点是偶数 更差。在许多情况下,放弃一些是可以接受的 可移植性:明确地写一个64位IEEE双 如果你的机器使用其他一些格式(这是 大多数大型机的情况。)