网络字节序和本机字节序的思考

来源:互联网 发布:汉诺塔算法内部流程 编辑:程序博客网 时间:2024/06/05 05:04

看下面一段程序:

#include <stdio.h>#include <arpa/inet.h>int main(int argc, char* argv[]){struct in_addr m;//2237180096m.s_addr=0x8558a8c0;//133 88 168 192printf("%u\n", m.s_addr );printf("%s\n", inet_ntoa(m));unsigned short t=0x0908; //2312printf("%hu\n",t);unsigned short s=ntohs(t);printf("%hu\n",s);return 0;}

输出结果:


首先s_addr是unsigned int类型,使用inet_ntoa转换时先判断本机的字节序位网络字节序(假如本地字节序是大端存储,就不用转),就是0x8558a8c0修改成0xc0a85885,每一个字节对应ipv4的一个段,如下:
c0           a8          58       85
192        168        88       133
ntohs不检查参数的字节序,只检查本地字节序是否和网络字节序一致。
ntohs()函数会先判断本地字节序,如果是小端存储(和大端字节序相反),就进行转换;如果是大端字节序就不进行转换。

原创粉丝点击