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并且没有内容。 我需要将它复制到缓冲区,因为我有其他信息可以附加到缓冲区以及字节。
答案 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));