大端和小端存储 --- Linux网络通信

1、什么是大、小端存储

  • 大端模式(big-endian): 高位字节排放在内存的低地址端 ; 低位字节排放在内存的低地址段 (高低,低高)
  • 小端模式 : 高字节高内存地址,低字节低内存地址

    例:一个十六进制数 : 0x12345678,存储的起始地址为:0011AA66

地址偏移 大端模式 小端模式
0x00 12 78
0x01 34 56
0x02 56 34
0x03 78 12

存储以字节为单位

2、网络字节序
网络字节序 : 大端模式  (TCP/IP规定好的数据表示格式,与具体的CPU类型,操作系统无关)
SO : 网络传输通信,以大端方式进行传输,传输到网络之前作数据模式转换预处理

3、大小端转换常用函数 (C)

  • uint32_t htonl(uint32_t host_long) //将32位的长整数从主机字节序转换成网络字节序
  • uint16_t htons(uint16_t host_short)
  • uint32_t ntohl(uint32_t host_long)
  • uint16_t ntohs(uint16_t host_short)

[注] h: host 主机序; n : net 网络序 ; s :short 16位短整数 ; l : long 32位长整数

4、大小端模式应用场景

  • 不同端模式的处理器进行数据传递
  • 通过网络传递数据

注意事项:
1、对应char类型,无需做字节序转换,本来就是以字节为单位
2、对于结构体,定义N个变量,必须逐个变量转换

猜你喜欢

转载自blog.csdn.net/zxj820/article/details/80374213