【问题标题】:C: Copying from a character array to an intC:从字符数组复制到 int
【发布时间】:2012-02-14 03:54:18
【问题描述】:
  // 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 给出了我期望的值。

想法?

【问题讨论】:

    标签: c arrays memcpy


    【解决方案1】:

    那是因为endianess,这意味着字节在int中的布局。

    在windows中,第二种方式会给你一个字节顺序相反的int,像这样:

    fsize=message[3]<<24;
    fsize+=message[2]<<16;
    fsize+=message[1]<<8;
    fsize+=message[0];
    

    【讨论】:

    • 完全正确。编写“网络堆栈模拟器”,部分项目正在使用 ntoh_ 和 hton_。感谢您为我指明了正确的方向!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-17
      • 2019-06-10
      • 2017-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多