int n=50;
假设你在32位机器上,'n'将是一个4字节的值。 N = 0x00000032 = 00000000B 00000000B 00000000B 00110010b
unsigned char bytes[4];
字节将已经一个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(字节))从字节4个字节来缓冲。
这是否符合您的期望可能是问题。 (更多的假设)
假定缓冲区为:预期
int buffer[1];
上述声明将复制。但是,如果使用以下代码测试此假设:
printf("buffer = %d\n", buffer[0]);
输出将取决于您在哪种机器上运行它;小端,或位端。
一方面,就会出放 “缓冲液= 50” 另一方面,它将输出的十进制值是equivelant到:
0x32000000 (00110010b 00000000 00000000b 00000000b 00000000b)
假设:
int buffer;
很可能会生成编译器警告(或错误);并且可能不是您想要的,除非您更改memcpy(),如下所示:
memcpy(&buffer,bytes,sizeof(bytes));