我是 C++ 的新手。我需要帮助将长整数值存储在 LSB 大小为 128 位的无符号字符数组中。例如:
long int myLong = 12340;
unsigned char myArray[16] = {};
memcpy(myArray,&myLong,sizeof(long int));
在 myArray
的 MSB 复制它,即,
0x34300000000000000000000000000000
但我需要将 myLong
存储在 myArray
中:
0x00000000000000000000000000003430
注意:我正在使用 64 位小端 (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);
关于c++ - 将 long 复制到 unsigned char 数组的后半部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19683945/