我们知道在由于大端机和小端机导致网络字节序和主机序有可能是有差异的,我们可以使用系统的ntohs,ntohl,htons和htonl这些处理函数进行转换,下面是我写的一个关于ntohs在处理小端机字节序转换的函数的简单实现.
思想大致如下:
用u_int16_t的2字节16位的整形变量来存储这个整数,首先将第一个字节和该变量进行或运算,运算结果左移八位,于是刚才的第一个字节结果就到了高八位,然后在与第二个字节进行或运算尽可以了
代码如下:
u_int16_t convert16(u_char *p)
{
u_int16_t tmp = 0;
tmp |= p[0];
tmp <<= 8;
tmp |= p[1];
return tmp;
}
这样就可以了。
由于是为了获取DNS头部中的资源数和附加数据中的数据长度部分而遇到的这个问题顺便简单介绍一下DNS的一些知识:
DNS报文的首部格式如下:
0 15 16 31
标识ID |
标志 |
问题数 |