C:从字符数组复制到int

时间:2012-02-14 03:54:19

标签: c arrays memcpy

  // 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));

有人可以解释为什么第二个不起作用?我正在复制的内存messagechar *。当我尝试测试fnamesize和fsize的值时,如printf("fsize is %d,fnamesize is %d",fsize,fnamesize);,fsize给出了一个意外的值,但fnamesize给出了我期望的值。

思考?

2 个答案:

答案 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”。