我有两个长长的数字a和b,每个都有8个字节 . 我也有一个16字节的数组arr . 我想用数字表示数组的第一个8字节,用b表示数组的最后8字节 .
我想做这样的事情:
#include <stdio.h>
int main() {
long long a = 123456;
long long b = 654321;
unsigned char arr[16];
memcpy(arr, a, 8);
memcpy(arr + 8, b, 8);
return 0;
}
编译器告诉我
不兼容的整数到指针转换将'long long'传递给'const void *'类型的参数[-Wint-conversion]
我的问题是如何将long long转换为可以放入我的数组的字节?
1 回答
你必须使用:
结果:
示例here
convertToCharArray
提取a
的每个字节并将其放在数组的不同单元格中 . 最重要的字节在索引0中 . 它与此相同:operator
>>
是"bitwise right shift"运算符:它在左操作数上运行n
位的移位(其中n
是右操作数) . 所以a >> 8
从8位向右移动a =>它将第二个字节放在第一个字节的位置 . 之后,我使用operator&
这是"bitwise and"运算符来实现一个掩码来激活只需要的字节 .Don't use memcpy to do that (便携性和安全性问题)
只是为了回答你的问题,
memcpy
希望有2个第一个参数的指针,所以你必须传递&a
和&b
.&
检索变量的地址 .