C memcpy unsigned char в массив из 1 элемента unsigned char для вычисления контрольной суммы - PullRequest
0 голосов
/ 10 февраля 2020

Существует массив символов 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.

1 Ответ

0 голосов
/ 10 февраля 2020

В этом вызове 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 };
...