字节序详解:大端序与小端序的区别及其在跨平台编程中的重要性
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博客
参考资料:
博主:风兔子喵
数据存储存在小端模式和大端模式,现在终于搞明白了!低地址和高地址的意思是什么呢?
页:
[1]