我是原始套接字的新手,我正在玩ip header。
我注意到了
ip->ip_hl = sizeof(struct ip) >> 2 //works fine;
然而
ip->ip_hl = hton(sizeof(struct ip) >> 2) //will not work;
我不明白的是,在这种情况下,为什么不将所有数字转换为网络订单而不是主机订单? 什么是判断何时使用网络订单/主机订单的一般规则?
由于
答案 0 :(得分:1)
htons
用于16位值。 htonl
用于32位值。至于hton
(没有后缀),我甚至不确定是否存在。
标头长度仅占用一个字节(实际上是一个字节的部分)。您无需翻转任何字节即可将其转换为正确的格式。因此,对于8位值,没有像htons
或htonl
这样的宏。