复制到unsigned char数组的后半部分

时间:2013-10-30 13:42:50

标签: c++ arrays pointers copy long-integer

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

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

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

0x34300000000000000000000000000000

但我需要myLongmyArray存储为:

0x00000000000000000000000000003430

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

编辑:我的不好,我推翻了myLong = 12340& myLong = 0x12340输出。我相应地修改了这个问题&是的,如果myLong = 0x12340&使用memcpymyArray看起来像:

0x40230100000000000000000000000000

1 个答案:

答案 0 :(得分: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);

请参阅here for a complete example