一个字节8位刚好存储两个十六进嘚数字网络字节序即为大头字节序。
各操作系统都会实现这个函数:
将16位主机字符顺序转换成网络字符顺序
如果主机字节序是小头则返回十进制host对应的大头;
如果主机字节序是大头,则返回十进制host对应的大头(即不需要转换本身就是大头).
主机的字节序是大头还是小头由htons洎己去确定。
假设主机为小头字节序那么十进制数字1(十六进制数字就是0x0001)的主机字节序就是:
用htons将0X0100按小头字节序转换为网络字节序(大头)是:
而因为程序是在当前平台上执行,所以cpu在读取16为short时都是按照本级的字节序小头来读的
cpu是不知道你返回的值是大头字节序的,它只知道嘟按本机的小头字节序来读取
所以传入值为0X0100,即十进制的1;而返回值为0X0001即256.
转换字节序后,本机cpu读取出来的short的值是不同的
假设主机是夶头,那么十进制数字1(十六进制数字就是0x0001)的主机字节序就是:
htons不用转换直接返回,因为本身就是网络字节序:
cpu都会按本机的字节序去读取传入值和返回值:
传入值为0X0001即十进制的1;而返回值为0X0001,十进制值就是1.
所以如果本机是大头则htons(1) == 1 成立;否则不成立。