Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将long复制到无符号字符数组的后半部分 我是C++新手。我需要帮助在LSB上存储128位大小的无符号字符数组中的长整数值。例如: long int myLong = 12340; unsigned char myArray[16] = {};_C++_Arrays_Pointers_Copy_Long Integer - Fatal编程技术网

将long复制到无符号字符数组的后半部分 我是C++新手。我需要帮助在LSB上存储128位大小的无符号字符数组中的长整数值。例如: long int myLong = 12340; unsigned char myArray[16] = {};

将long复制到无符号字符数组的后半部分 我是C++新手。我需要帮助在LSB上存储128位大小的无符号字符数组中的长整数值。例如: long int myLong = 12340; unsigned char myArray[16] = {};,c++,arrays,pointers,copy,long-integer,C++,Arrays,Pointers,Copy,Long Integer,memcpy(myArray,&myLong,sizeof(long int))在myArray的MSB处复制它,即 0x34300000000000000000000000000000 但是我需要myLong存储在myArray中,作为: 0x00000000000000000000000000003430 注意:我正在一台64位little endian(LSB)机器上工作。我必须将相应的字节向右移动。有没有办法实现这一目标,或者有什么现有的职能可以完成这项工作 编辑:我的错,我否决了m

memcpy(myArray,&myLong,sizeof(long int))
myArray
的MSB处复制它,即

0x34300000000000000000000000000000
但是我需要
myLong
存储在
myArray
中,作为:

0x00000000000000000000000000003430
注意:我正在一台64位little endian(LSB)机器上工作。我必须将相应的字节向右移动。有没有办法实现这一目标,或者有什么现有的职能可以完成这项工作

编辑:我的错,我否决了
myLong=12340
myLong=0x12340
输出之间的差异。我相应地修改了问题&yes,如果使用了
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);
size\u ti=sizeof(myArray)/sizeof(myArray[0]);//在数组的最后一个索引之外获取一个
对于(大小移位=0;移位0;移位+=4)
myArray[--i]=静态_转换((myLong>>shift)&0x0f);

请参阅。

这与endianess无关,事实上,结果应该(在32位
且在MSB机器上)是
0x00 0x01 0x23 0x40 0x00 0x00等
。我不知道用
memcpy
这个值怎么得到数字之间的零填充。哦,如果在LSB机器(如x86或x86_64)上执行此操作,则生成的数组将是
0x40 0x23 0x01 0x00
后跟全零。我也很困惑。假设您使用的是PowerPC CPU,为什么您的输出以
400
结束,而不是
040
?你想在末尾加一个零吗?如果你想把它存储在
array+12
,那就告诉它
memcpy(myArray+12,…)
。正如@JoachimPileborg所指出的,
0x12340!=0x01020304
,所以您的期望值有点不明确。在小型endian机器(即x86或x86_64)上,我希望您的示例生成
0x402310000…