大端格式 与 小端格式

1. 什么是大端 什么是小端

大端模式: 是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;

小端模式: 是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。

2. 为什么会有大小端
为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

3.大小端在内存中的存放方式举例:
例如,16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址0x40000x4001
存放内容0x340x12

而在Big-endian模式CPU内存中的存放方式则为:

内存地址0x40000x4001
存放内容0x120x34

32bit宽的数0x12345678在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址0x40000x40010x40020x4003
存放内容0x780x560x340x12

而在Big-endian模式CPU内存中的存放方式则为:

内存地址0x40000x40010x40020x4003
存放内容0x120x340x560x78

字节序是针对CPU寻址而言的。

不同的cpu处理内存数据的方式不同,以及cpu和网络处理数据的方式也可能不同,所以要指明大端还是小端。尤其是在做跨平台的项目的时候

补充:

网络字节序,是和大端系统一致。也就是网络上传输任何数据的时候,采用大端系统一致的存放方法。

因此X86系统上,都需要把网络序转换成主机序。

注明转载:https://www.cnblogs.com/novalist/p/6432670.html

### 大端字节序小端字节序在总线格式中的差异及应用场景 大端字节序(Big-Endian)小端字节序(Little-Endian)是两种不同的数据存储方式,它们定义了多字节数据类型(如整数、浮点数等)在内存或通信总线中的排列顺序。以下将详细探讨两者在总线格式中的应用及区别。 #### 1. 字节序的基本概念 在计算机系统中,字节序是指多字节数据类型在内存中的存储顺序。对于一个4字节的无符号整数`value = 0x12345678`,其在大端模式小端模式下的存储方式如下所示[^2]: | 内存地址 | 大端模式 | 小端模式 | |----------|-----------|-----------| | 0x00000001 | 0x12 | 0x78 | | 0x00000002 | 0x34 | 0x56 | | 0x00000003 | 0x56 | 0x34 | | 0x00000004 | 0x78 | 0x12 | - **大端模式**:最高有效字节(Most Significant Byte, MSB)存储在最低地址处。 - **小端模式**:最低有效字节(Least Significant Byte, LSB)存储在最低地址处。 #### 2. 总线格式中的应用 在CAN总线等通信协议中,数据传输的基本单位可能是比特而非字节。因此,字节序的概念需要进一步扩展到比特级别。例如,在CAN总线中,为了充分利用每个比特位,通常会根据具体需求选择适合的字节序[^1]。 - **大端字节序在总线中的应用**: - 大端模式更适合网络通信场景,尤其是跨平台的数据交换。由于数据的最高有效位优先传输,接收方可以更早地解析出关键信息。 - 在某些嵌入式系统中,当需要快速识别数据包头时,大端模式的优势尤为明显。 - **小端字节序在总线中的应用**: - 小端模式常用于本地数据处理,尤其是在Intel架构的处理器中广泛使用。 - 对于需要频繁访问低字节的操作,小端模式能够提供更高的效率。 #### 3. 差异分析 大端字节序小端字节序的主要差异体现在以下几个方面: - **存储顺序**: - 大端模式按从高到低的顺序存储字节。 - 小端模式按从低到高的顺序存储字节。 - **传输顺序**: - 在通信总线中,大端模式通常先传输最高有效字节。 - 小端模式则先传输最低有效字节。 - **适用场景**: - 大端模式适用于网络通信、文件格式等领域,强调数据的一致性可读性。 - 小端模式适用于本地数据处理计算密集型任务,注重性能优化。 #### 4. 示例代码 以下是一个简单的Python代码示例,展示如何判断当前系统的字节序,并模拟大端小端模式的存储过程: ```python import sys # 判断当前系统的字节序 print(f"System byte order: {sys.byteorder}") # 模拟大端小端模式的存储 value = 0x12345678 byte_array = value.to_bytes(4, byteorder='big', signed=False) # 大端模式 print(f"Big-Endian: {byte_array}") byte_array = value.to_bytes(4, byteorder='little', signed=False) # 小端模式 print(f"Little-Endian: {byte_array}") ``` 运行结果可能为: ``` System byte order: little Big-Endian: b'\x124Vx' Little-Endian: b'xV4\x12' ``` #### 5. 总结 大端字节序小端字节序各有优劣,其选择取决于具体的应用场景。在网络通信跨平台数据交换中,大端模式更受欢迎;而在本地数据处理性能敏感的任务中,小端模式更具优势。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值