官方服务微信:dat818 购买与出租对接

字节序详解:大端序与小端序的区别及其在跨平台编程中的重要性

2万

主题

2

回帖

7万

积分

管理员

积分
73302
发表于 2025-4-1 22:19:55 | 显示全部楼层 |阅读模式
    1.字节序

    字节序指的是多字节数据在内存里的存放顺序,这在跨平台和网络编程时是一个重要概念。字节序主要有两种类型,一种是大端序,另一种是小端序。

    2.大端序与小端序

    大端序下,数据的高位字节存于内存的低地址端,低位字节存于高地址端。小端序则是低位字节存于内存的低地址端,高位字节存于高地址端。比如对于数值,在不同字节序中,其在内存中的存放方式如下:

    内存地址 大端模式 小端模式

     0x12 0x78

     0x34 0x56

     0x56 0x34

     0x78 0x12

    3.网络字节序与主机字节序

    网络字节序指的是 TCP/IP 协议中所使用的字节序,一般是大端字节序。主机字节序是计算机内存中所使用的字节序,现今的 PC 大多采用小端字节序。在进行网络通信时,为确保数据的一致性,发送方要把主机字节序转换成网络字节序,接收方则需把网络字节序转换回主机字节序。

    4.转换函数

    htons(Host TO Short):其作用是把 16 位的短整型(short)从主机字节序转变为网络字节序。一般会用于转换端口号。主机字节序与网络字节序存在差异,此函数主要就是进行这样的转换操作。

    htonl 用于将 32 位的长整型从主机字节序转换为网络字节序。它常被用于转换 IPv4 地址。主机字节序与网络字节序存在差异。

    ntohs(To Host Short):它的作用是把 16 位的网络字节序转变为主机字节序。一般在转换端口号时会用到它,因为端口号是 16 位的数值。是网络字节序大于主机字节序。

    ntohl(转换为长整型):可把 32 位的网络字节序转变为主机字节序。一般用于对以 16 进制表示的 IP 地址进行转换,原因是 IPv4 地址是一个 32 位的数值。网络字节序大于主机字节序。

    将点分十进制的 IP 地址字符串转换为网络字节序的二进制值,转换后的结果是一个 long 类型的值,此值可直接赋给结构体中的.S_un.成员。宏在转换成功时会返回一个非零值,而在转换失败时会返回(通常是)。主机字节序大于网络字节序。

    用于把一个结构体(此结构体里有一个 IPv4 地址的二进制表示)转化成一个点分十进制的 ip 地址的字符串。网络字节序比主机字节序大。

    用于把点分十进制的 IP 地址字符串转换为网络字节序的二进制形式,并且这种转换既支持 IPv4 地址,也支持 IPv6 地址。

    接受三个参数,分别是地址族(或)、IP 地址的字符串以及一个指向存储转换后地址的缓冲区的指针。函数在成功时返回 1,在输入的字符串不是一个有效的地址时返回 0,在出错时返回 -1。

    htonl和的区别:

    htonl 一般是用于整数类型的相关数据,并非用于地址字符串。举例来说:

    long  = ; // 127.0.0.1

    addr..S_un. = htonl();

    127.0.0.1 是主机字节序的表示形式,将其转换为十六进制后,通过 htonl 函数将其转换为网络字节序,然后赋值给.S_un. 。

    而是对点分十进制的ip地址进行处理。

    在处理IPv4地址字符串时,通常只需要使用 。

    和的区别:

    通信函数中,dst参数的值-CSDN博客

    参考资料:

    博主:风兔子喵

    数据存储存在小端模式和大端模式,现在终于搞明白了!低地址和高地址的意思是什么呢?

更多帖子推荐

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|小黑屋|关于我们

Copyright © 2001-2025, Tencent Cloud.    Powered by Discuz! X3.5    京ICP备20013102号-30

违法和不良信息举报电话:86-13718795856 举报邮箱:hwtx2020@163.com

GMT+8, 2025-4-12 19:19 , Processed in 0.078112 second(s), 18 queries .