[英]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.