簡體   English   中英

在 C 中使用 memcpy 復制無符號字符數組

[英]Copying a unsigned char array using memcpy in C

int n=50;
unsigned char bytes[4];
unsigned char *buffer=(unsigned char*)malloc(sizeof(int));
bytes[0]=(n>>24)&0xFF;
bytes[1]=(n>>16)&0xFF;
bytes[2]=(n>>8)&0xFF;
bytes[3]=n&0xFF;

memcpy(buffer,bytes,sizeof(bytes));

這不會將字節數組復制到緩沖區。 知道為什么嗎? 可以做些什么來將數組復制到緩沖區?

當我嘗試在 memcpy 之后打印 sizeof(buffer) 或內容時,它顯示 0 並且沒有內容。 我需要將它復制到緩沖區,因為我有其他信息要與字節一起附加到緩沖區。

 int n=50; 

假設您使用的是 32 位機器,'n' 將是一個 4 字節的值。 n = 0x00000032 = 00000000b 00000000b 00000000b 00110010b

 unsigned char bytes[4];

bytes 將有一個 4 字節的值:

 bytes[0]=(n>>24)&0xFF;

字節[0] = 00000000b

 bytes[1]=(n>>16)&0xFF;

字節[1] = 00000000b

 bytes[2]=(n>>8)&0xFF;

字節[2] = 00000000b

 bytes[3]=n&0xFF;

字節[3] = 00110010b

memcpy(buffer,bytes,sizeof(bytes));

將 (sizeof(bytes)) 4 個字節從字節復制到緩沖區。

這是否符合您的預期也許是個問題。 (更多假設)


假設緩沖區是:

int buffer[1];

上述語句將按預期復制。 但是,如果您使用以下代碼測試此假設:

printf("buffer = %d\n", buffer[0]);

輸出將取決於您運行它的機器類型; 小端,或位端。

一方面,它會輸出“buffer = 50”另一方面,它將輸出十進制值,相當於:

0x32000000 (00110010b 00000000 00000000b 00000000b 00000000b)

假設:

int buffer;

很可能會產生編譯器警告(或錯誤); 並且可能不是你想要的,除非你改變你的 memcpy() 如下:

memcpy(&buffer,bytes,sizeof(bytes));

暫無
暫無

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

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