// Works
int fnamesize=0;
fnamesize=message[0]<<24;
fnamesize+=message[1]<<16;
fnamesize+=message[2]<<8;
fnamesize+=message[3];
// Doesn't work
int fsize;
memcpy(&fsize,message,sizeof(int));
有人可以解释为什么第二个不起作用?我正在复制的内存message
是char *
。当我尝试测试fnamesize和fsize的值时,如printf("fsize is %d,fnamesize is %d",fsize,fnamesize);
,fsize给出了一个意外的值,但fnamesize给出了我期望的值。
思考?
答案 0 :(得分:3)
这是因为endianess,这意味着int中的字节布局。
在windows中,第二种方法将为您提供一个具有相反字节顺序的int,如下所示:
fsize=message[3]<<24;
fsize+=message[2]<<16;
fsize+=message[1]<<8;
fsize+=message[0];
答案 1 :(得分:1)
尝试更改代码中数组索引的顺序,将结果与不起作用的代码进行比较,并查找术语“big endian”和“little endian”。