C:从字符数组复制到整数

C:从字符数组复制到整数,c,arrays,memcpy,C,Arrays,Memcpy,有人能解释为什么第二个不起作用吗?我从中复制的内存,消息是一个字符*。当我尝试测试fnamesize和fsize的值时,例如printfSize是%d,fnamesize是%d,fsize,fnamesize;,fsize给出了一个意外的值,但fnamesize给出了我期望的值 想法 这是因为,这意味着int中的字节布局 在windows中,第二种方法将为您提供具有相反字节顺序的int,如下所示: // Works int fnamesize=0; fnamesize=message

有人能解释为什么第二个不起作用吗?我从中复制的内存,消息是一个字符*。当我尝试测试fnamesize和fsize的值时,例如printfSize是%d,fnamesize是%d,fsize,fnamesize;,fsize给出了一个意外的值,但fnamesize给出了我期望的值

想法

这是因为,这意味着int中的字节布局

在windows中,第二种方法将为您提供具有相反字节顺序的int,如下所示:

  // 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));
这是因为,这意味着整数中的字节布局

在windows中,第二种方法将为您提供具有相反字节顺序的int,如下所示:

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

尝试更改代码中有效数组索引的顺序,将结果与无效代码进行比较,并查找术语big-endian和little-endian。

尝试更改代码中有效数组索引的顺序,将结果与无效代码进行比较,然后查找术语big-endian和little-endian。

完全正确。编写一个网络堆栈模拟器,该项目的一部分正在与ntoh_uu和hton_uu合作。谢谢你给我指明了正确的方向!绝对正确。编写一个网络堆栈模拟器,该项目的一部分正在与ntoh_uu和hton_uu合作。谢谢你给我指明了正确的方向!