2 回答
TA贡献1866条经验 获得超5个赞
htons 是把你机器上的整数转换成“网络字节序”, 网络字节序是 big-endian,也就是整数的高位字节在前面。 而我们常用的 x86 CPU (intel, AMD) 电脑是 little-endian,也就是整数的低位字节放在前面。举个例子吧。假定你的port是
0x1234,
在网络字节序里 这个port放到内存中就应该显示成
addr addr+1
0x12 0x34
而在x86电脑上,0x1234放到内存中实际是:
addr addr+1
0x32 0x12
htons 的用处就是把实际内存中的整数存放方式调整成“网络字节序”的方式。
再次回楼主,你的问题就是我说的, htons(4367) 后,在x86机器上,就是变成了 3857,就是因为字节序被调整了,这是正确的. 4367十六进制是0x110F,由于是little endian所以在内存中存放的是
0x0F 0x11
htons后,变成网络字节续,也就是
0x11 0x0F
这个数字如果你去看了话,就是
3857.
TA贡献1834条经验 获得超8个赞
htons 是把你机器上的整数转换成“网络字节序”, 网络字节序是 big-endian,也就是整数的高位字节在前面。 而我们常用的 x86 CPU (intel, AMD) 电脑是 little-endian,也就是整数的低位字节放在前面。举个例子吧。假定你的port是
0x1234,
在网络字节序里 这个port放到内存中就应该显示成
addr addr+1
0x12 0x34
而在x86电脑上,0x1234放到内存中实际是:
addr addr+1
0x32 0x12
htons 的用处就是把实际内存中的整数存放方式调整成“网络字节序”的方式。
再次回楼主,你的问题就是我说的, htons(4367) 后,在x86机器上,就是变成了 3857,就是因为字节序被调整了,这是正确的. 4367十六进制是0x110F,由于是little endian所以在内存中存放的是
0x0F 0x11
htons后,变成网络字节续,也就是
0x11 0x0F
这个数字如果你去看了话,就是
3857.
你debug的时候,直接去看端口的内存里的内容,就明白了。
- 2 回答
- 0 关注
- 95 浏览
添加回答
举报