大端和小端

本文深入解析了计算机系统中字节序的概念,包括高字节和低字节的区别,大端和小端的存储方式,以及网络字节序与主机字节序之间的转换,帮助读者理解数据在网络传输和内存存储中的字节顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.高字节和低字节

2.高地址和低地址

3.大端和小端

4.网络字节序和主机字节序


计算机中以字节为单位,每个地址对应一个字节,一个字节8bit。在计算机系统中,如果大于一个字节,就需要区分字节顺序。常见的字节顺序分为:大端(Big Endian)和小端(Litter Endian)。想要理解什么是大端和小端,首先需要明确下面几个概念。

1.高字节和低字节

什么是高字节?什么是低字节?

在一个n进制的位中,最左边的位叫最高有效位,最右边的叫最低有效位。
举个例子,1个int的整数123456789
二进制表示:0000 0111 0101 1011 1100 1101 0001 0101
十六进制表示: 07 5B CD 15

按照从右向左的方向,二进制中,0101是低字节,最左边的0000是高字节;十六进制中,15是低字节,07是高字节

2.高地址和低地址

在内存中,多字节对象都是被存储为连续的字节序列。假设将int整型在内存中的起始地址(首个字节存储位置)为0x1000,那么另外三个字节就存储在0x1001~0x1003。不管存储的字节顺序是怎样的,内存地址的分配都是从小到大的增长。其中0x1000称为低地址端,0x1003称为高地址端。

3.大端和小端

大端:高字节存放在低地址,低字节存放在高地址

小端:低字节存放在低地址,高字节存放在高地址

还是以上面的int 123456789为例,十六进制表示: 07 5B CD 15

 内存地址(低——>高)字节存储顺序 
大端(Big Endian)0x1000 0x1001 0x1002 0x10030x07 0x5B 0xCD 0x15

高字节存放在低地址

低字节存放在高地址

小端(Litter Endian)0x1000 0x1001 0x1002 0x10030x15 0xCD 0x5B 0x07

低字节存放在低地址

高字节存放在高地址


4.网络字节序和主机字节序

大小端一般是由CPU架构决定的。

网络字节序(Network Order):TCP/IP各层协议将字节序定义为Big Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。

  主机字节序(Host Order):整数在内存中保存的顺序,它遵循Little Endian规则(不一定,要看主机的CPU架构)。所以当两台主机之间要通过TCP/IP协议进行通信的时候就需要调用相应的函数进行主机序列(Little Endian)和网络序(Big Endian)的转换。

 

参考连接: https://www.cnblogs.com/Leo_wl/p/3427363.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值