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