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

问题描述 投票:-1回答:1

有一个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);

我也尝试了另一种方法,但得到了invalid initializer

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

理想情况下,我希望我的ACK数组保留ACKbuffer中的值。

c memcpy unsigned-char
1个回答
0
投票

在此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 };
© www.soinside.com 2019 - 2024. All rights reserved.