计组-大/小端存放区别

在计算机系统中,大端存放(Big-Endian)小端存放(Little-Endian)是两种不同的多字节数据存储方式,主要区别在于字节在内存中的排列顺序。理解它们对底层编程(如网络通信、二进制文件处理、硬件交互等)至关重要。


1. 核心概念

假设有一个 32 位整数 0x12345678(十六进制),其占用 4 个字节(12345678)。两种存储方式的区别如下:

大端存放(Big-Endian)

  • 高位字节存储在低地址,顺序与人类书写习惯一致。

  • 内存布局(地址从左到右递增):

    地址: 0x1000  0x1001  0x1002  0x1003
    数据: 0x12    0x34    0x56    0x78

小端存放(Little-Endian)

  • 低位字节存储在低地址,顺序与人类书写习惯相反。

  • 内存布局:

    地址: 0x1000  0x1001  0x1002  0x1003
    数据: 0x78    0x56    0x34    0x12

2. 实际例子

示例代码(C语言验证)

c

#include <stdio.h>int main() {int num = 0x12345678;unsigned char *p = (unsigned char *)&num;printf("内存字节顺序:\n");for (int i = 0; i < sizeof(num); i++) {printf("地址 %p: 0x%02x\n", p + i, p[i]);}return 0;
}
  • 在小端机器(如x86)运行结果

    text

    地址 0x7ffc...: 0x78  // 低字节在低地址
    地址 0x7ffc...: 0x56
    地址 0x7ffc...: 0x34
    地址 0x7ffc...: 0x12  // 高字节在高地址
  • 在大端机器(如某些PowerPC)运行结果

    text

    地址 0x7ffc...: 0x12  // 高字节在低地址
    地址 0x7ffc...: 0x34
    地址 0x7ffc...: 0x56
    地址 0x7ffc...: 0x78  // 低字节在高地址

3. 关键区别总结

特性大端(Big-Endian)小端(Little-Endian)
字节顺序高位字节在低地址低位字节在低地址
人类可读性更直观(类似书写顺序)反直觉
常见架构PowerPC、SPARC、网络协议x86/x64、ARM(通常可配置)
网络传输默认采用大端(网络字节序)需转换(如 htonl()

4. 为什么需要区分?

(1)跨平台数据传输

  • 如果一台小端机器(如PC)向大端机器(如某些嵌入式设备)发送数据,直接传输会导致解析错误。

  • 解决方案:统一使用网络字节序(大端),通过函数转换:

    c

    #include <arpa/inet.h>
    uint32_t htonl(uint32_t hostlong); // 主机序→网络序(大端)
    uint32_t ntohl(uint32_t netlong);  // 网络序→主机序

(2)二进制文件解析

  • 如BMP图片文件头按大端存储,若用小端方式读取会出错。

(3)硬件寄存器访问

  • 某些硬件设备寄存器可能固定使用大端或小端,需匹配CPU的端序。


5. 如何判断当前系统的端序?

方法1:C代码检测

c

int is_little_endian() {int num = 1;return *(char *)&num == 1; // 若低地址存1,则为小端
}

方法2:使用联合体(Union)

c

union EndianTest {int num;char bytes[4];
} test = {0x12345678};if (test.bytes[0] == 0x78) {printf("Little-Endian\n");
}

6. 特殊案例与注意事项

  • ARM架构:多数支持可配置端序(通过硬件设置选择大端或小端模式)。

  • 浮点数:IEEE 754 浮点数的端序与整数一致,但结构更复杂。

  • 混合端序:个别体系结构可能对不同的数据类型使用不同端序(罕见)。


总结

  • 大端:高位在前,适合人类阅读,用于网络协议和部分硬件。

  • 小端:低位在前,x86/ARM主流,效率高(硬件设计简单)。

  • 关键场景:跨平台通信、文件解析、硬件交互时需显式处理端序问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92529.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92529.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线程同步相关知识

文章目录一、线程同步的核心目标二、线程安全的判定条件三、同步方式一&#xff1a;synchronized 关键字1. 同步代码块2. 同步方法四、锁的释放与不释放场景1. 自动释放锁的场景2. 不会释放锁的场景五、同步方式二&#xff1a;ReentrantLock&#xff08;显式锁&#xff09;1. 核…

Armoury Crate无法通过BIOS卸载

设备&#xff1a;天选4 Armoury Crate窗口反复弹出影响使用体验&#xff0c;但无法通过BIOS关闭该怎么办&#xff1f;本文以天选4为例提供解决方案。 Step1&#xff1a;进入服务支持官网 Armoury Crate-服务支持 下滑点击”查看更多” 下载安装卸载工具 得到Armoury_Crate_Un…

如何将视频转为GIF格式,3大视频转为GIF工具

在社交媒体和即时通讯盛行的当下&#xff0c;GIF 动图以其独特的魅力备受青睐。它能够生动地捕捉视频中的精彩瞬间&#xff0c;凭借体积小巧、无需复杂加载且可循环播放的特性&#xff0c;成为了人们在网络交流中表达情感、分享趣事的得力工具。无论是制作诙谐幽默的表情包&…

开发避坑指南(22):Vue3响应式编程中this绑定机制与解决方案

错误信息 TypeError: Cannot read properties of undefined (reading find) TypeError: r.vnode.el.querySelector is not a function报错背景 vue2项目升级到vue3后&#xff0c;原来的代码报错。 报错代码computed: {/** 计算列的显示与隐藏*/columnVisible() {return functio…

AI学习笔记三十五:实时传输视频

若该文为原创文章&#xff0c;转载请注明原文出处。 目的是实现视频的传输&#xff0c;只是个demo. 程序分为两部分&#xff0c;视频接收端和视频发送端。 一、视频接收端流程分析 主要流程&#xff1a; 初始化配置&#xff1a; 设置UDP端口&#xff08;5001&#xff09;和缓…

【ArcGIS】分区统计中出现Null值且Nodata无法忽略的问题以及shp擦除(erase)的使用——以NDVI去水体为例

需求 已有某地NDVI栅格、行政区shp以及水体shp&#xff0c;计算每个行政区的平均NDVI 问题 1.如果不剔除水体 负值NDVI会把平均值拉低 且水体NDVI并不全为负 需要通过shp剔除&#xff0c;Mask掩膜是提取水体本身而不是剩余部分 2.使用分区统计工具&#xff08;Zonal statis…

Linux中的内核同步源码相关总结

什么是内核同步Linux 内核同步是指内核中用于解决并发执行单元&#xff08;如进程、中断、内核线程等&#xff09;对共享资源&#xff08;如全局数据结构、硬件寄存器、链表等&#xff09;的竞争访问的一系列机制和技术。其核心目标是保证多个并发单元在操作共享资源时的数据一…

WORD接受修订,并修改修订后文字的颜色

在 Word 中&#xff0c;接受修订之后默认会采用正文的默认字体格式&#xff0c;不会保留修订时设置的颜色&#xff0c;比如“插入内容是蓝色字体”的设置会被清除。 如果你想要做到&#xff1a;✅ 接受所有修订后仍然让“原插入的文字”变为蓝色字体保留下来你只能通过一些手动…

行业速览:中国新能源汽车市场格局与关键趋势

在全球汽车产业迈向绿色、低碳、智能化的变革浪潮中&#xff0c;新能源汽车已成为各国争夺的战略高地。中国&#xff0c;作为全球最大的汽车市场和新能源汽车制造国&#xff0c;正以强大的市场规模、完整的产业链体系以及快速提升的技术创新能力&#xff0c;在这场变革中不断加…

【51单片机2个按键控制流水灯转向】2022-10-25

缘由51单片机按键流水灯-嵌入式-CSDN问答 #include "REG52.h" sbit k1P3^0; sbit k2P3^1; void main() {unsigned char l0,xd0,ys10,ys20,z0;P1l;while(1){if(k10&&xd0){z0;while(k10);}if(k20&&xd0){z1;while(k20);}if(ys10)if(ys20){if(z0)if(l0)…

flutter开发(一)flutter命令行工具

安装 Linux下面的flutter安装比较简单&#xff0c;在flutter 中文战 上下载一个最新稳定的版本&#xff0c;解压到系统上就行了。 我下载的是Linux下的3.32.7版。 解压之后&#xff0c;flutter目录里会有bin、dev等目录&#xff0c;把bin目录加到系统的PATH环境变量里&#…

OpenCV 入门实战:从环境配置到图像 / 视频处理

OpenCV 是计算机视觉领域最常用的开源库之一&#xff0c;它提供了丰富的图像和视频处理功能。本文将从环境配置开始&#xff0c;带大家一步步解析基础操作代码&#xff0c;快速入门 OpenCV 的使用。 一、环境配置 在开始之前&#xff0c;我们需要先搭建好 OpenCV 的运行环境。…

2.2.1 饰面板材和陶瓷的特性和应用

1、饰面石材1&#xff09;天然花岗岩2&#xff09;天然大理石3&#xff09;人造石&#xff08;1&#xff09;人造石按主要原材料分包括人造石实体面材、人造石英石和人造石岗石等产品。2、建筑卫生陶瓷建筑卫生陶瓷包括建筑陶瓷和卫生陶瓷两大类。建筑陶瓷包括陶瓷砖、建筑琉璃…

C++的结构体数组

结构体数组的基础知识 结构体数组通过​​组合数据批量管理​​的特性&#xff0c;广泛应用于学生管理、游戏角色属性存储等场景。常见问题 ​​数组越界​​&#xff1a;静态数组长度固定&#xff0c;超过数组长度的访问&#xff0c;会导致未定义行为。​​未初始化成员​​&a…

小程序中使用echarts(2025/8/8)

这篇博文讲的很详细&#xff0c;也很简洁&#xff0c;这里补充一点东西 小程序中使用echarts(硬货&#xff0c;全网最详细教程&#xff01;)_小程序使用echarts-CSDN博客 简单来说就是去官网下载ec-canvas组件&#xff0c;将其中的echarts.js换成echarts.min.js&#xff08;原…

【SpringBoot】SpringBoot配置

根据自动配置原理 学习后&#xff0c;整理学习笔记 一定要耐心去看&#xff0c;耐着性子去学习&#xff0c;慢慢慢慢就明白了 配置深化学习 前提 通过 SpringBootApplication 找到 EnableAutoConfiguration&#xff1b;发现 Import({AutoConfigurationImportSelector.class})…

网络安全与软件定义汽车的发展

在许多汽车公司&#xff0c;同一个系统工程团队同时负责安全&#xff08;safety&#xff09;和安防&#xff08;security&#xff09;。因此&#xff0c;网络安全被视为安全&#xff08;safety&#xff09;的一个子集&#xff0c;其根源在于一个隐含的假设&#xff1a;“如果安…

字典列表依据数值键排序

要根据字典列表中的特定数值键进行排序&#xff0c;我们可以使用 Python 的 sorted() 函数配合自定义排序键。以下是操作方法&#xff1a; 1. 按升序排序&#xff08;从小到大&#xff09; sorted_list sorted(original_list, keylambda x: x[数值键名])2. 按降序排序&#xf…

五、SpringBoot工程打包与运行

SpringBoot工程打包与运行 1、SpringBoot项目快速启动&#xff08;Windows版&#xff09; (1)对SpringBoot项目打包&#xff08;执行Maven构建指令package&#xff09;&#xff1a; mvn package (2)运行项目&#xff08;执行启动指令&#xff09; java -jar springboot.jar 2、…

构建高可用架构:ZDNS GSLB 在多数据中心场景下的应用与 F5 替换实践

随着互联网的快速发展&#xff0c;金融机构、大型企业等组织单位&#xff0c;出于自身业务发展的需要和国家监管的要求&#xff0c;纷纷通过建设多数据中心来提升不同地区的用户体验&#xff0c;同时避免不可抗力因素带来的巨大损失。ZDNS GSLB 全局负载均衡技术&#xff0c;能…