• ntohl()、htonl()、ntohs()、htons()函数


    一 、大端存储和小端存储

    1、大端存储:在计算机中,数据是按照字节存储的,多于一个字节的数据,把高字节部分存储在低地址,把低字节部分存储在高地址,这种方式称为大端存储。
    例:0x12345678这个数据,我们一般认为左边是高字节部分,右边是低字节部分,那么在采用大端存储的计算机内部的存储则为下面这样
    低地址: 0x12(高字节)
    >>>>>: 0x34
    >>>>>: 0x56
    高地址: 0x78(低字节)
    即一个整型数据的首地址=高位部分(首地址=低地址)

    2、小端存储:多于一个字节的数据,把高字节部分存储在高地址,把低字节部分存放在低地址。
    例:0x12345678这个数据,我们一般认为左边是高字节部分,右边是低字节部分,那么在采用小端存储的计算机内部的存储则为如何下这样
    低地址: 0x78(低字节)
    >>>>>: 0x56
    >>>>>: 0x34
    高地址: 0x12(高字节)
    即首地址部分=低位部分(首地址=低地址)

    二、ntohl()、htonl()、ntohs()、htons()函数

    网络传输通讯过程中,采用大端在前的方式进行数据发送,对于采用小端模式进行数据存储的系统,要把多字节的数据通过网络传输出去,则需要将数据的字节序进行转换,再进行发送。接收的过程亦然。
    在这几个函数中n代表net网络,h代表host主机,l代表long长整型,s代表short短整型。这几个函数的作用分别为:

    ntohl():将一个无符号长整形数从网络字节顺序转换为主机字节顺序

    htonl():将一个无符号长整形数从主机字节顺序转换为网络字节顺序

    ntohs():将一个无符号短整形数从网络字节顺序转换为主机字节顺序

    htons():将一个无符号短整形数从主机字节顺序转换为网络字节顺序

    如下代码

    uint32 a=0x12345678;
    uint32 b;
    b=htonl(a);
    
    • 1
    • 2
    • 3

    运行的结果为b=0x78563412;

  • 相关阅读:
    产品心理学:识知偏见,我们和自己开的玩笑
    程序员的三重境界:码农,高级码农、程序员!
    深度学习在图像识别中的革命性应用
    Java设计模式之观察者模式
    MySQL数据库基本操作-DQL-聚合查询
    ResNet 09
    设计模式 - 访问者模式
    微信小程序项目开发Day1
    柯桥俄语培训机构哪家好,能说出“как”的多少种用法呢?
    UNPV2 学习:Posix Message Queues Exercise 解答记录
  • 原文地址:https://blog.csdn.net/a777122/article/details/126676619