我想做的其实应该很简单,但我不知道如何用简单的方式实现它:
我想将一个无符号整数(32 位)的值复制到一个无符号字符数组中。 数组内的表示必须始终采用小端。
在小端架构上我可以简单地做:
unsigned char array[sizeof(unsigned int)];
unsigned int i = 12345;
memcpy(array, &i, sizeof(unsigned int));
表示将采用小字节序。 在大端架构上实现这一目标的最佳方法是什么? 我如何确定我的代码中架构的字节顺序?
我的项目使用 C++11 标准。
提前致谢!
最佳答案
您不想“复制”
无符号整数
;你想把它格式化成一个指定的外部
表示。这相对容易:
*dest ++ = (i ) & 0xFF;
*dest ++ = (i >> 8) & 0xFF;
*dest ++ = (i >> 16) & 0xFF;
*dest ++ = (i >> 24) & 0xFF;
也就是毕竟定义了一个32位的little endian 表示。
有符号整数可以更复杂,因为有不同的 负数的表示, float 是偶数 更差。在很多情况下,放弃一些是可以接受的 可移植性:写一个 64 位的 IEEE double 无疑是 如果您的机器使用其他格式(这是 大多数大型机的情况)。
关于c++ - 复制有关字节序的整数内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21000618/