代码之家  ›  专栏  ›  技术社区  ›  user2793162

对htonl输出感到困惑

  •  0
  • user2793162  · 技术社区  · 12 年前

    我有一个简单的问题。此代码:

       int t = 1;
    
       int y = htonl(t);
       printf("Y = %d, sizeof(int)=%d", y, sizeof(int));
    

    印刷品

    Y = 16777216, sizeof(int)=4
    

    在小端序机器上(实际上是在线编译器)。

    我在期待 y 数字(二进制):1000…000(0-31次)。

    但16777216只有大约25个0,仅次于1(二进制)。

    我错过了什么?

    2 回复  |  直到 12 年前
        1
  •  2
  •   MOHAMED    12 年前
    int t = 1;
    

    内存(用于4字节系统)以这种方式呈现

     ---------------
    | 0 | 0 | 0 | 1 |
     ---------------
      ^            ^
      | byte       | = 0x1 = 00000001 in binary
    

    二进制格式为

    00000000 00000000 00000000 00000001 
    

    htonl() 如果您的系统是小端系统,则允许反转字节

    所以 htonl(t) 将返回:

     ---------------
    | 1 | 0 | 0 | 0 |
     ---------------
      ^
      | = 0x1 = 00000001 in binary
    

    所以整个 顿(t) 二进制格式为

    00000001 00000000 00000000 00000000
    

    等于 16777216 十进制

        2
  •  1
  •   Sergey L.    12 年前

    它完全按照你的要求做了。

    十六进制输出为 01 00 00 00 . htonl 关于小端交换 字节 周围,而不是比特。

    16777216 = 0x01000000