使用C中的memcpy复制unsigned char数组

时间:2014-04-12 18:51:16

标签: 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));

这不会将bytes数组复制到缓冲区。知道为什么??可以做些什么来将数组复制到缓冲区?

当我尝试打印sizeof(缓冲区)或memcpy之后的内容时,它显示0并且没有内容。 我需要将它复制到缓冲区,因为我有其他信息可以附加到缓冲区以及字节。

1 个答案:

答案 0 :(得分:1)

 int n=50; 

假设您使用的是32位机器,'n'将是一个4字节的值。 n = 0x00000032 = 00000000b 00000000b 00000000b 00110010b

 unsigned char bytes[4];

字节将具有4字节值:

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

byte [0] = 00000000b

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

byte [1] = 00000000b

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

byte [2] = 00000000b

 bytes[3]=n&0xFF;

byte [3] = 00110010b

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

复制(sizeof(字节))从字节到缓冲区的4个字节。

这是否符合您的预期或许是个问题。 (更多假设)


假设缓冲区为:

int buffer[1];

上述声明将按预期复制。但是,如果您使用代码usch测试此假设:

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

输出取决于您运行它的机器类型;小端,或位端。

首先,它将输出“buffer = 50” 另一方面,它将输出等效的十进制值:

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

假设:

int buffer;

很可能会生成编译器警告(或错误);并且可能不是你想要的,除非你改变你的memcpy()如下:

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