// 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 给出了我期望的值(value)。
想法?
最佳答案
那是因为endianess ,表示字节在 int 中的布局。
在 Windows 中,第二种方式会给你一个字节顺序相反的 int,像这样:
fsize=message[3]<<24;
fsize+=message[2]<<16;
fsize+=message[1]<<8;
fsize+=message[0];
关于C:从字符数组复制到 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9271475/