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

标签 c++ c c++11

我想做的其实应该很简单,但我不知道如何用简单的方式实现它:

我想将一个无符号整数(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/

相关文章:

c - 部分混淆C代码

c - argc 和 argv 用于 main 以外的函数

c++ - 函数重载、继承和隐式构造函数 : weird priority

c++ - 如何在 C++ 函数之外限制 `using` 语句的范围?

在 C++ 中具有多个枚举参数的 C++ 函数模板部分特化?

c++ - 在程序中显示静态 C++ 对象的初始化顺序?

c++ - 在 C++ 中使用 istringstream 读取输入时出错

C++ vector 对初始化

c - strncpy 行为与 sprintf 不同

c++ - 使用 IGRAPH 面向对象编程