【发布时间】:2013-10-30 13:42:50
【问题描述】:
我是 C++ 新手。我需要帮助将长整数值存储在 LSB 大小为 128 位的 unsigned char 数组中。例如:
long int myLong = 12340;
unsigned char myArray[16] = {};
memcpy(myArray,&myLong,sizeof(long int)); 将其复制到myArray 的 MSB,即,
0x34300000000000000000000000000000
但我需要将myLong 存储在myArray 中:
0x00000000000000000000000000003430
注意:我正在使用 64 位 little-endian (LSB) 机器。而且我必须将相应的字节向右移动。有没有办法实现这个目标或任何现有的功能可以完成这项工作?
编辑:我的错,我否决了 myLong = 12340 和 myLong = 0x12340 输出之间的区别。我相应地修改了问题&是的,如果使用myLong = 0x12340 & memcpy,myArray 看起来像:
0x40230100000000000000000000000000
【问题讨论】:
-
这与字节序无关,实际上结果应该(在 32 位
long和 MSB 机器上)是0x00 0x01 0x23 0x40 0x00 0x00 etc。我不知道您如何获得具有该值的memcpy的数字之间的零填充。哦,如果您在 LSB 机器(如 x86 或 x86_64)机器上执行此操作,则结果数组将是0x40 0x23 0x01 0x00后跟全零。 -
我也很困惑。假设您使用的是 PowerPC CPU,为什么您的输出以
400而不是040结尾?你想在末尾多加一个零吗? -
如果你想把它存储在
array+12,那么就告诉它memcpy(myArray+12,....)。而且,正如@JoachimPileborg 所说,0x12340 != 0x01020304,所以你的期望有点不清楚。在小端机器(即 x86 或 x86_64)上,我希望您的示例产生0x40230100000...。
标签: c++ arrays pointers copy long-integer