在基于网络通信协议开发时通常会去读取协议头部获取相关信息,这里面必须注意一点,如果某个数据是占用2个字节以以上的,则读取其数值时必须转换字节序,因为主机字节序和网络字节序有时是颠倒的,比如IPv6的一个数据报载荷长度(2个字节)十六进制为 B0 05 ,如果这时我们不转换字节序去读取其值则为:40561,这明显对于我们下一步的计算是错误的数,因为在以太网中,最大MTU才1500,转换字节序后为05 B0 ,此时转换为10进制为:1456,这时就是正常的值。
总结:基于网络通信协议开发时,如果需要读取协议首部字段信息(一般这个字段存储的是数,比如数据长度、偏移值等),如果某个字段占用2个字节及以上,则先转换字节序再进行下一步计算,转换方法:使用ntohs函数即可,如果是长整型,则用ntohl
评论