C++ 复制有关endianess的整数内容

C++ 复制有关endianess的整数内容,c++,c,c++11,C++,C,C++11,我想做的其实应该很简单,但我不知道如何用一种简单的方式来实现: 我想将无符号整数(32位)的值复制到无符号字符数组中。 数组中的表示形式必须始终使用小尾端 在一个小小的endian架构上,我可以简单地做到: unsigned char array[sizeof(unsigned int)]; unsigned int i = 12345; memcpy(array, &i, sizeof(unsigned int)); 该表示将使用little endian。 在大端体系结构上实现这一

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

我想将无符号整数(32位)的值复制到无符号字符数组中。 数组中的表示形式必须始终使用小尾端

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

unsigned char array[sizeof(unsigned int)];
unsigned int i = 12345;
memcpy(array, &i, sizeof(unsigned int));
该表示将使用little endian。 在大端体系结构上实现这一点的最佳方法是什么? 我如何在代码中找出架构的持久性

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

提前谢谢

您不想“复制”对象的内部表示形式
无符号整数
;要将其格式化为指定的外部文件 代表性。这相对容易:

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

有符号整数可能更复杂,因为有不同的 表示负数,浮点是偶数 更糟的在很多情况下,放弃一些是可以接受的 可移植性:编写一个64位IEEE double是绝对必要的 如果您的计算机使用其他格式(即 大多数大型机的情况)。

您不想“复制”大型机的内部表示形式
无符号整数
;要将其格式化为指定的外部文件 代表性。这相对容易:

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

有符号整数可能更复杂,因为有不同的 表示负数,浮点是偶数 更糟的在很多情况下,放弃一些是可以接受的 可移植性:编写一个64位IEEE double是绝对必要的 如果您的计算机使用其他格式(即
大多数大型机的情况下。)

计算端性的一种方法是使用htons()。如果(0x1234==htons(0x1234))您是big-endian。这是多个问题,而不仅仅是一个问题。首先:如何检测endianess。看一看。第二:如何从大端到小端转换。看一看。现在有了你的代码片段,你应该可以解决你的问题了。如果你是大端的,你可以变换位,使用掩码。对于(j=0;j<4;j++)数组[j]=i>>((3-j)*8)&0xFF;-我认为。考虑到32位值至少有三种不同的endianness(实际上已经使用过——理论上有24种),我认为任何依赖于检测endianness的答案都是糟糕的解决方案。@tebe换句话说,调用
i=htons(i)
memcpy
解决整个问题之前。一种解决endianness的方法是使用htons()。如果(0x1234==htons(0x1234))您是big-endian。这是多个问题,而不仅仅是一个问题。首先:如何检测endianess。看一看。第二:如何从大端到小端转换。看一看。现在有了你的代码片段,你应该可以解决你的问题了。如果你是大端的,你可以变换位,使用掩码。对于(j=0;j<4;j++)数组[j]=i>>((3-j)*8)&0xFF;-我认为。考虑到32位值至少有三种不同的endianness(实际上已经使用过——理论上有24种),我认为任何依赖于检测endianness的答案都是糟糕的解决方案。@tebe换句话说,调用
i=htons(i)
memcpy
解决了他的整个问题之前。我喜欢这个,因为它非常有效。dest总是用小端点表示,即使我是大端点?@rra如果你遵循逻辑,你会发现内部表示是什么并不重要。输出将始终是little endian。相关:Rob Pike的博客文章,嵌入学术界,我喜欢这篇文章,因为它非常有效。dest总是用小端点表示,即使我是大端点?@rra如果你遵循逻辑,你会发现内部表示是什么并不重要。输出将始终是little endian。相关:Rob Pike的博客文章,并嵌入学术界