我有一个简单的问题。这段代码:
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个零(二进制)。
我错过了什么?
答案 0 :(得分:2)
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
答案 1 :(得分:1)
它完全符合您的要求。
您的十六进制输出为01 00 00 00
。小端的htonl
交换字节,而不是位。
16777216 = 0x01000000