对 htonl 输出感到困惑

标签 c binary endianness

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

   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 在 1 旁边只有大约 25 个零(二进制)。

我错过了什么?

最佳答案

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

所以二进制的整个htonl(t)

00000001 00000000 00000000 00000000

等于十进制的16777216

关于对 htonl 输出感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21730405/

相关文章:

c - xmm clang 汇编注释中的字节顺序

c - C中socket编程和使用htonl(),htons()函数的错误

c - 我的生命游戏计划的最后一点。看似随机的结果

c - Mac 上连接字符集时出现总线错误 10

二进制到标准数字?

pcap - pcap 中的 ntohs() 到底是做什么的?

c - 使用 isalpha() 导致文本转储

c - 在 C 中迭代 Char 数组元素

python - 为什么给定的二叉树是用空节点构造的?

Java 与 C# : BigInteger hex string yields different result?