我是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
答案 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);