当前位置: 首页 > news >正文

大小端存储的意思与区别

小端存储(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()函数)。

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

相关文章:

  • 相机镜头景深
  • 程序化广告行业(47/89):竞价指标剖析与流量对接要点
  • 脑机交互安全:如何防止恶意脑电波指令注入
  • 算法导论(动态规划)——路径问题
  • Laravel Trait 实现 统一JSON 响应格式
  • CSS定位
  • 观察者模式在Java微服务间的使用
  • 学习大模型需要具备哪些技术、知识和基础
  • 【蓝桥杯速成】| 17.完全背包(一维easy版)
  • 题解:P8667 [蓝桥杯 2018 省 B] 递增三元组 (暴力+二分)
  • DeepSeek原生稀疏注意力(Native Sparse Attention, NSA)算法介绍
  • 【SpringCloud】LoadBalance-负载均衡
  • html处理Base文件流
  • 【C++项目】从零实现RPC框架「三」:项⽬抽象层实现
  • 动手实现docker全过程
  • python求解非线性方程组
  • 蓝桥杯——统计子矩阵
  • 设计模式学习(1)
  • 顺据结构(C\C++)——双向链表
  • 【Qt】游戏场景和图元
  • 域名查ip地址查询/西安seo主管
  • 长沙有哪些网站建设公司好/谷歌广告代运营
  • 兰州网站备案谁家做/宁波seo推广定制
  • 搭建网站团队计划/百度快速排名优化技术
  • 随便编一个公司网站/站长网站
  • 请问做网站怎么赚钱/bt种子磁力搜索