[英]Copy long into second half of unsigned char array
我是C ++的新手。 我需要在LSB处将长整数值存储在大小为128位的无符号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
如果按照您想要的结果进行操作,其中每个半字节(四个位,即每个十六进制数字)在结果数组中获得其自己的字节,则可以执行以下操作:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.