C memcpy unsigned char 到 1 元素 unsigned char 数组用于校验和计算

标签 c memcpy unsigned-char

有一个字符数组ACKbuffer[2],所以我首先将我想要的元素转换为unsigned char,但当我尝试时,它给了我一个错误>memcpy 将其转换为 unsigned char 数组。

//first element is checksum
unsigned char ack_csum;
ack_csum = (unsigned char)ACKbuffer[0];
//second element is ACK which needs to be run through checksum 
//in a checksum function that accepts unsigned char array as parameter
unsigned char ACK_actual = (unsigned char)ACKbuffer[1];
unsigned char ACK [1];
memcpy(ACK, ACK_actual, 1);

错误:

note: expected ‘const void * restrict’ but argument is of type ‘unsigned char’
 extern void *memcpy (void *__restrict __dest, const void *__restrict __src,
              ^~~~~~
swap_client.c: In function ‘swap_write’:
swap_client.c:185:17: warning: passing argument 2 of ‘memcpy’ makes pointer from integer without a cast [-Wint-conversion]
     memcpy(ACK, ACK_actual, 1);

我也尝试了另一种方法,但我得到无效的初始化程序:

unsigned char ACK_actual = (unsigned char)ACKbuffer[1];
unsigned char ACK [1] = ACK_actual;

理想情况下,我希望我的 ACK 数组保存来自 ACKbuffer 的该值。

最佳答案

在memcpy的调用中

memcpy(ACK, ACK_actual, 1);

变量 ACK_actual 的类型为 unsigned char

unsigned char ACK_actual = (unsigned char)ACKbuffer[1];

但该函数需要指针类型。

直接写

memcpy(ACK, ACKbuffer + 1, 1);

至于第二个代码片段,你应该这样写

unsigned char ACK_actual = (unsigned char)ACKbuffer[1];
unsigned char ACK [1] = { ACK_actual };

关于C memcpy unsigned char 到 1 元素 unsigned char 数组用于校验和计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60142506/

相关文章:

c - 为什么 memcpy 在第二次尝试时不起作用?

c++ - 有没有办法直接从文件中读取数字到 unsigned char 变量?

c - 如何删除空格并检查字符串是否是回文?

c - 为什么 `void func(int A[const 10])` 使数组参数成为 const 而不是数组元素?

c++ - 导出 map 可以只选择您要链接到的功能吗?

c - 这是整数提升吗?它是如何工作的?

c++ - 结构到 u_char 的转换

c - C 中的二维傅里叶变换

c++ - 如何使C++类在内存中具有特定的大小

C编程: String arrays - how to check equality?