复制关于endianess的整数内容

rra*_*alf 1 c c++ c++11

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

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

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

unsigned char array[sizeof(unsigned int)];
unsigned int i = 12345;
memcpy(array, &i, sizeof(unsigned int));
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢!

Jam*_*nze 8

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

*dest ++ = (i      ) & 0xFF;
*dest ++ = (i >>  8) & 0xFF;
*dest ++ = (i >> 16) & 0xFF;
*dest ++ = (i >> 24) & 0xFF;
Run Code Online (Sandbox Code Playgroud)

也就是说,毕竟是32位小端表示的定义.

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

  • @rralf如果你遵循逻辑,你会发现内部表示是什么并不重要.输出将*总是*是小端. (2认同)
  • 相关:Rob Pike的博客帖子,[字节顺序错误](http://commandcenter.blogspot.co.uk/2012/04/byte-order-fallacy.html),以及嵌入学术界[便携式字节顺序代码]优化?](http://blog.regehr.org/archives/702) (2认同)