我将尝试将一个无符号字符数组缓冲区转换为有符号整数(反之亦然)。
下面是演示代码:
下面是演示代码:
int main(int argv, char* argc[])
{
int original = 1054;
unsigned int i = 1054;
unsigned char c[4];
int num;
memcpy(c, (char*)&i, sizeof(int));
//num = *(int*) c; // method 1 get
memcpy((char *)&num, c, sizeof(int)); // method 2 get
printf("%d\n", num);
return 0;
}
1) 我应该使用哪种方法将 unsigned char[] 转换为 int?
是使用方法 1 还是方法 2? (或者有其他建议)
2) 如何将 int 转换为 unsigned char[]?
我需要通过仅接受 unsigned char[] 的缓冲区发送此整数。
目前我所做的是将 int 转换为 unsigned int,然后再转换为 char[],例如:
int g = 1054;
unsigned char buf[4];
unsigned int n;
n = g;
memcpy(buf, (char*)&n, sizeof(int));
虽然它能正常工作,但我不确定这是否是正确的方式或者是否安全?
附注:我正在尝试通过USB串行通信(在树莓派和Arduino之间)发送数据。
unsigned char buf[sizeof(int)]
而不是unsigned char buf[4]
。 - user824425*(int *)c
也违反了严格别名规则,请勿这样做。 - M.Mchar*
和void*
是例外。 - user3528438