c++ - 将 long 复制到 unsigned char 数组的后半部分

标签 c++ arrays pointers copy long-integer

我是 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 = 12340myLong = 0x12340 输出之间的差异。我相应地修改了问题 & 是的,如果使用 myLong = 0x12340 & memcpymyArray 看起来像:

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);

参见 here for a complete example .

关于c++ - 将 long 复制到 unsigned char 数组的后半部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19683945/

相关文章:

C++ "var foo = !!::bar()"语法?

arrays - 如何匹配两个数组的内容并得到对应的索引ruby

c++ - 在 C++ 中删除 char 数组末尾的输入键值

c - 在 C 中自动将值复制到指针

c - 在C中删除链表中的重复项不起作用

用于处理网格上的分布式矩阵的 C++ 库

c++ - 在密码提示中隐藏用户输入

javascript - 在 JS Connect-Four 中返回获胜的单元格坐标

c - C 中不兼容的指针类型。什么时候使用 * 或 &?对引用指针的概念有疑问

c++ - 从私有(private)成员公开 Q_PROPERTY