簡體   English   中英

C memcpy unsigned char 到 1 個元素的 unsigned char 數組用於校驗和計算

[英]C memcpy unsigned char to 1 element unsigned char array for checksum calculation

有一個字符數組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值。

在這個 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 };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM