我想要做的事实上应该很简单,但我不知道如何以一种简单的方式实现它:
我想将无符号整数(32位)的值复制到无符号字符数组。 数组中的表示必须始终为little endian。
在一个小端架构上,我可以很简单地做到:
unsigned char array[sizeof(unsigned int)];
unsigned int i = 12345;
memcpy(array, &i, sizeof(unsigned int));
表示将以小尾数表示。 在大端架构上实现这一目标的最佳方法是什么? 我如何在我的代码中找出我的架构的endianess?
我的项目使用C ++ 11标准。
提前致谢!
答案 0 :(得分:8)
您不想“复制”内部表示
unsigned int
;您想将其格式化为指定的外部
表示。这相对容易:
*dest ++ = (i ) & 0xFF;
*dest ++ = (i >> 8) & 0xFF;
*dest ++ = (i >> 16) & 0xFF;
*dest ++ = (i >> 24) & 0xFF;
毕竟,这是一个32位小端的定义
表示。
有符号整数可能更复杂,因为有不同 负数的表示,浮点是偶数 更差。在许多情况下,放弃一些是可以接受的 可移植性:明确地写一个64位IEEE双 如果你的机器使用其他一些格式(这是 大多数大型机的情况。)