大小端存储的意思与区别

小端存储(Little - Endian)与大端存储(Big - Endian)

一、核心区别

  1. 大端存储(Big - Endian)
    • 字节排列特点:高字节在前,即数据的最高有效字节存储在最低的内存地址。
    • 类比人类书写数字习惯:类似人类书写数字的顺序(从左到右,高位到低位)。
  2. 小端存储(Little - Endian)
    • 字节排列特点:低字节在前,即数据的最低有效字节存储在最低的内存地址。
    • 类比存储顺序:类似反序存储(低位在前,高位在后)。

二、存储示例:以存储0x12345678(4字节整数)为例

  1. 大端存储(Big - Endian)
    • 代码示例:
uint8_t array[4] = {0x12, 0x34, 0x56, 0x78}; 
  • 内存布局解释:
    • 地址0x00(起始地址)存储最高字节0x12,依次递减。
    • 内存布局:
      地址: 0x00  0x01  0x02  0x03
      值:   0x12  0x34  0x56  0x78
      
  1. 小端存储(Little - Endian)
    • 代码示例:
uint8_t array[4] = {0x78, 0x56, 0x34, 0x12};
  • 内存布局解释:
    • 地址0x00(起始地址)存储最低字节0x78,依次递增。
    • 内存布局:
      地址: 0x00  0x01  0x02  0x03
      值:   0x78  0x56  0x34  0x12
      

三、常见应用场景

  1. 大端存储
    • 应用于网络协议(如TCP/IP)、Java虚拟机等。
  2. 小端存储
    • 应用于x86/x64架构、ARM(通常可配置)。

四、判断当前系统的字节序(C代码示例)

#include <stdio.h>
int main() {
    int num = 1;
    if (*(char *)&num == 1) {
        printf("Little - Endian\n");
    } else {
        printf("Big - Endian\n");
    }
    return 0;
}
  • 解释:如果num的最低字节(0x01)存储在起始地址,则为小端。

五、区分的必要性

  1. 跨平台数据传输方面
    • 在跨平台数据传输(如网络通信)时需统一字节序,通常用大端作为网络字节序。
  2. 数据读取与设备通信方面
    • 在读取二进制文件或跨设备通信时需处理字节序转换(如ntohl()函数)。

通过数组的例子能够直观地展现出两者在存储顺序上的差异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值