0

我是 C++ 新手。我需要帮助将长整数值存储在 LSB 大小为 128 位的 unsigned char 数组中。例如:

long int myLong = 12340;
unsigned char  myArray[16] = {};

memcpy(myArray,&myLong,sizeof(long int));将其复制到 的 MSB 处myArray,即

0x34300000000000000000000000000000

但我需要myLong存储myArray为:

0x00000000000000000000000000003430

注意:我正在使用 64 位小端(LSB)机器。而且我必须将相应的字节向右移动。有没有办法实现这个目标或任何现有的功能来完成这项工作?

编辑:myLong = 12340我的错,我否决了&myLong = 0x12340输出之间的区别。我相应地修改了问题&是的,如果使用myLong = 0x12340& memcpymyArray看起来像:

0x40230100000000000000000000000000
4

1 回答 1

1

如果按照您想要的结果,每个半字节(四个位,即每个十六进制数字)在结果数组中都有自己的字节,您可以执行以下操作:

size_t i = sizeof(myArray) / sizeof(myArray[0]);  // Get one beyond last index of array
for (size_t shift = 0; shift < sizeof(myLong) * 8 && i > 0; shift += 4)
    myArray[--i] = static_cast<unsigned char>((myLong >> shift) & 0x0f);

有关完整示例,请参见此处。

于 2013-10-30T13:47:15.870 回答