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