繁体   English   中英

长复制到无符号字符数组的后半部分

[英]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 = 12340myLong = 0x12340输出之间的区别。 我相应地修改了问题,是的,如果使用myLong = 0x12340memcpy ,则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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM