网络编程中的大小端字节序详解

    最近公司项目整改,组长让整改下自己所属模块的大小端字节序。以前自己整理过大小端字节序,不过这次再次整理的时候,发现自己对这些用法还是理解的不够透彻。

    主要有以下的一些疑问:

    1.我认为ntoh和hton其实就是一样的函数,换了个名字而已。里面的实现本质就是进行顺序互换。

    端模式:字节序分为大端字节序小端字节序,也就是字节在内存中的顺序。

    小端字节序:低字节存放于内存低地址,高字节存放于内存高位地址。

    如一个数据0x12345678

    0x0029f458   0x78

    0x0029f459   0x56

    0x0029f45a   0x34

    0x0029f45b   0x12

    内存地址的大小顺序为0x0029f458< 0x0029f459<0x0029f45a<0x0029f45b

    数据的大小顺序为0x78<0x56<0x34<0x12

    小数据在小的内存地址中,所以为小端字节序

    大端字节序和以上就相反。

     网络字节序都是大端字节序

     

      字节序转化函数

      htonl     ntohl    htons   ntohs

       h代表host,主机

       n代表net,网络

       c/s架构的传输

       1.一段调用hton的时候,在另一端接收到的时候,只要对应的调用ntoh。那就是不会有问题的。

      2.主机cpu的结构决定了自己本端是大端还是小端。如果自己本端本身本身就是大端字节序,那么就收到网络上的数据之后,就算执行ntoh函数,也是不做任何的处理。因为就是相当于大端转化为大端了。ntoh函数内部会判断主机本身是大端还是小端序。 

     

        


    

你可能感兴趣的:(网络通信)