大端小端详解

article/2025/9/24 22:24:38

转载:大端小端详解

1>"大端" "小端"的来源

关于大端小端名词的由来,网传有一个有趣的故事,可以追溯到1726年的Jonathan Swift的《格列佛游记》,其中一篇讲到有两个国家因为吃鸡蛋究竟是先打破较大的一端还是先打破较小的一端而争执不休,甚至爆发了战争。

《格利佛游记》:“Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因是:我们都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可是那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他的父亲,就下令,命令所有的子民吃鸡蛋的时候,必须先打破鸡蛋较小的一端,违令者重罚。然后老百姓对此法令极为反感,由此发生了多次叛乱,产生叛乱的原因就是另一个国家Blefuscu的国王大臣煽动起来的。叛乱平息后,流亡的人就逃到这个帝国避难。据估计,先后几次有11000余人情愿si也不肯去打破鸡蛋较小的端吃鸡蛋。”

Swift的《格列佛游记》其实是在讽刺当时英国(Lilliput)和法国(Blefuscu)之间持续的冲突。

现在以大端、小端的命名Big-Endian、Little-Endian看,确实也符合鸡蛋的特征,一切源于生活。

2> 计算机中“大端”“小端”是指什么

大端小端真正引入计算机领域,是来自于一位网络协议的早期开创者Danny Cohen,他第一次使用这两个术语指代字节顺序,后来慢慢被大家广泛接受。

字节顺序说的到底是什么,先复习一个基础知识:

位(bit):计算机中的最小数据单位,计算机存储的都是二进制0和1这两个鬼。

字节(Byte):字节是存储空间的基本计量单位,也是内存的基本单位,也是编址单位。例如,一个计算机的内存是4GB,就是该计算机的内存中共有4×1024×1024×1024个字节,意味着它有4G的内存寻址空间。

换算关系:

1 GB = 1024 MB

1 MB = 1024 KB

1 KB = 1024 Bytes

1 Byte = 8 bits

【Q】:思考一个问题,通常描述32位二进制数据,为什么是用8个十六进制数呢?如0x1A2B3C4D

【A】:十六进制(hex)是一种逢16进1的进位制。十六进制的数码有1,2,3,4,5,6,7,8,9,A(10),B(11),C(12),D(13),E(14),F(15)。

第一种理解:

4个二进制bit 表示的数值范围是从0000~1111,即0~15, 刚好等同于 一位 16进制数的数值范围0~F(15)。

所以可以类推得出:

1Byte = 8bit;即1个字节包含8个二进制bit,8个二进制bit对应需要2位十六进制数来表示(最大值为 0xFF);

4Byte = 32bit; 即4个字节包含32个二进制bit,32个二进制bit对应需要8位十六进制数来表示;(最大值为 0xFFFFFFFF);

第二种理解:

因为16=2^4(2的4次方),所以1位十六进制数可以转化为4位二进制数,即十六进制的每个字符需要用4位二进制位来表示,如0x0为0000,0xF为1111,即1个16进制数为4位二进制bit。

所以反推32位二进制数换算为十六进制数后的位数就变为32÷4=8位,即32位二进制地址信息需要8位十六进制数表示。

总结下:

4个二进制位(bit)(不够表示一个字节) = 1个十六进制(hex)。

8个二进制位(bit) = 一个字节(Byte) = 2个十六进制(hex)。

32个二进制位(bit) = 四个字节(Byte) = 8个十六进制(hex)。

所以针对一个32位的数值,如0x1A2B3C4D,总共四个字节,两个十六进制数表示一个字节,高位字节为0x1A,低位字节为0x4D;中间两个字节分别为0x2B0x3C

数值0x1A2B3C4D想要在计算机中正确使用,就必须要考虑在内存中将其对应的四个字节合理存储。假设内存的地址都是从低到高分配的,那么对于一个数值多个字节顺序存储就有两种存储方式:

方式一、数值的高位字节存放在内存的低地址端,低位字节存放在内存的高地址端:

内存低地址 --------------------> 内存高地址

0x1A | 0x2B | 0x3C | 0x4D

高位字节 <-------------------- 低位字节

方式二、数值的低位字节存放在内存的低地址端,高位字节存放在内存的高地址端:

内存低地址 --------------------> 内存高地址

0x4D | 0x3C | 0x2B | 0x1A

低位字节 --------------------> 高位字节

方式一 ,我们就称之为 大端模式;即高位字节放在内存的低地址端,低位字节放在内存的高地址端。

方式二 ,我们就称之为 小端模式;即低位字节放在内存的低地址端,高位字节放在内存的高地址端。

画图更直观理解一下:

总结下:

  • 大端小端是不同的字节顺序存储方式,统称为字节序
  • 大端模式,是指数据的高字节位 保存在 内存的低地址中,而数据的低字节位 保存在 内存的高地址中。这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放。和我们”从左到右“阅读习惯一致。
  • 小端模式,是指数据的高字节位 保存在 内存的高地址中,而数据的低字节位 保存在 内存的低地址中。这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。

分享一个私人口语化记忆小技巧:

  • 大端模式:“【低位】字节却硬要存在【高】地址中“。---“低对高(或高对低),门不当户不对,真令人头大”,记作大端模式。
  • 小端模式:“【低位】字节正好存在【低】地址中”。--- “低对低,门当户对,你侬我侬”,记作小端模式。

3> 为什么要学习理解“大端”“小端”

大端模式:

基于其存储特点,符号位在所表示的数据的内存的第一个字节中,便于快速判断数据的正负和大小(CPU做数值运算时从内存中依顺序依次从低位地址到高位地址取数据进行运算,大端就会最先拿到数据的(高字节的)符号位)。

小端模式:

基于其存储特点,内存的低地址处存放低字节,所以在强制转换数据时不需要调整字节的内容(比如,把int---4字节强制转换成short---2字节,就可以直接把int数据存储的前两个字节给short就行,因为其前两个字节刚好就是最低的两个字节,符合转换逻辑;另外CPU做数值运算时从内存中依顺序依次从低位地址到高位地址取数据进行运算,开始只管取值,最后刷新最高位地址的符号位就行,这样的运算方式会更高效一些)。

因为两种模式各有优点,存在“你有我无,你无我有”的特点,所以造就了不同的硬件厂商基于不同的效率(角度)考虑,有了不同的硬件设计支持,最终形成了计算机各个相关领域目前并没有采用统一的字节序,没有统一标准的现状。

其实也不难理解,就好比文章开头描述的“吃鸡蛋方式之争一样” 天下之大又有谁能站出来限定或证明,吃鸡蛋必须从“小端”开始,就一定比从“大端”开始 好?或者 吃鸡蛋必须从“大端”开始,就一定比从“小端”开始 好?呢。

“大端“ ”小端” 各有优点,同吃鸡蛋方式一样,世人都有各自选择的权利。

目前我们常见的CPU PowerPC、IBM是大端模式,x86是小端模式。ARM既可以工作在大端模式,也可以工作在小端模式,一般ARM都默认是小端模式。一般通讯协议都采用的是大端模式。

另外,常见文件的字节序如下:

BMP – Little Endian

GIF – Little Endian

JPEG – Big Endian

RTF – Little Endian

Adobe PS – Big Endian

DXF(AutoCAD) – Variable

所以我们只有理解“大端”“小端”,才能在跨平台、跨芯片、跨系统,跨网络通信时,实时对内存字节序进行检查和转换,保证传递内容的正确性。假设没有操作系统工程师,网络工程师在背后默默对字节序的检查和转换,可能你用你的X86机器通过QQ给我PowerPC机器QQ表了个白,但数据在内存中传递乱的yipi,消息到了以后,前言不搭后语,我都完全不知道你想说什么,也不知道你在表白,彼此完美错过将是结局。


http://chatgpt.dhexx.cn/article/80OKq2Mg.shtml

相关文章

大端序发送数据

需要发送数字 151510 大端序发送就是 &#xff1a;00 02 4F D6 string smallData textBox1.Text;//小端数据if (smallData ""){MessageBox.Show("请输入初始里程", "错误",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);textBox1.Text …

c语言之大端小端问题

这就是字节序问题&#xff1a;数据在计算机内存中存储或者网络传输时各字节的存储顺序 通常来说就分为两种情况&#xff1a; 一种是大端(big-endian)&#xff1a;高字节(高位)存放在低地址&#xff0c;低字节(低位)存在高地址 另外一种小端(little-endian)&#xff1a;高位存放…

数据存储:大端小端

文章目录 问题起源大端小端大端小端优劣符合人类阅读方式数据类型转换符号位的识别 参考资料 曾经辨析和了解过大端小端&#xff0c;但是到了实际应用中还是比较模糊。整理一些资料文章&#xff0c;在此记录。 问题起源 在计算机的使用以及现代很多的嵌入式设备中&#xff0c;…

大端与小端

一.大小端介绍 “大端”和“小端”表示多字节值的哪一端存储在该值的起始地址处。小端存储在起始地址处&#xff0c;即是小短字节序&#xff1b;大端存储在起始地址处&#xff0c;即是大端字节序。 大端存储模式&#xff1a;数据的低位保存在内存中的高地址中&#xff0c;数据…

大端和小端的含义及判断代码

1、概述 在计算机系统中&#xff0c;数据都是以字节进行存储的&#xff0c;每个地址单元对应一个字节&#xff0c;每个字节都是8位&#xff08;bit&#xff09;。但是C除了char和bool之外&#xff0c;还有其它多字节类型。怎样存储多字节的数据就分为了大端和小端。字节序只和…

C语言基础 —大端和小端

大端和小端 1、什么是大端和小端2、为什么会有大端和小端3、怎样判断是大端还是小端 1、什么是大端和小端 大端模式&#xff1a;就是 高位字节 存放在内存的 低地址端&#xff0c;低位字节 存放在内存的 高地址端 小端模式&#xff1a;就是 低字节存 放在内存的 低地址端&…

大端和小端的区别和判断

1.概念 大端模式(big endian)&#xff1a;数据的高位字节保存在内存的低地址中&#xff0c;而低位字节保存在内存的高地址中。 小端模式(little endian)&#xff1a;数据的高位字节保存在内存的高地址中&#xff0c;而低位字节保存在内存的低地址中。 问&#xff1a;什么是高…

什么是大端和小端

大端&#xff08;存储&#xff09;模式&#xff1a;是指数据的低位保存在内存的高地址中&#xff0c;而数据的高位保存在低地址中&#xff1b; 小端&#xff08;存储&#xff09;模式&#xff1a;是指数据的低位保存在内存的低地址中&#xff0c;而数据的高位保存在高地址中。 …

大端、小端的前世今生

什么是大端、小端&#xff1f; BigEndian(大端)&#xff1a;低字节在高内存地址 LittleEndian(小端)&#xff1a;低字节在低内存地址 所谓大端小端&#xff0c;也就是看低字节在高内存地址还是低内存地址&#xff0c;也就是看低字节在前还是高字节在前&#xff0c;低字节在前…

数据存储:小端模式和大端模式——终于搞明白了!!!

首先要记住&#xff1a;读数据永远是从低地址开始的&#xff01;&#xff01;&#xff01; 正文开始 什么是低地址、高地址&#xff1f; 地址编号小的是低地址&#xff0c;地址编号大的是高地址 什么是数据的低位、高位&#xff1f; 小端模式 数据的低位放在低地址空间&am…

室内定位技术(三)——自有定位技术

我们正在使用的技术是以wifi信号强度正态分布为核心&#xff0c;结合神经网络原理的一套完整算法&#xff0c;并对wifi信号的正态分布情况作了很多的优化工作。 以下是在两组wifi信号强度正态分布研究的实例图&#xff1a; 四条不同颜色的线分别代表不同的ap信号强度的正态分布…

室内定位浅析

这一星期都在弄室内定位的事情&#xff0c;关于室内定位。需求就是两个终端之间&#xff0c;能够快速地通过室内定位做出路线规划&#xff0c;进行导航。 这个精确的室内定位路线规划得益于WIFI的精确部署。 先开看看这个WiFi的理论部署模型。 等边三角形的三个顶点作为三个无…

物联网之室内定位

摘要&#xff1a;室内定位正处于百家争鸣、技术爆发的阶段&#xff0c;尤其近年随着UWB、Wi-Fi以及5G等通信技术的广泛应用。 1、定位需求 物联网时代&#xff0c;位置服务已成为人们工作生活必不可少的服务之一&#xff0c;网约车、外卖、导航等都依赖定位服务。这些最常用的…

室内定位关键技术(indoor location)

一、Wi-Fi定位 Wi-Fi定位是目前相对成熟且应用广泛的定位技术&#xff0c;定位方法是基于信号强度的传播模型法和指纹识别法。信号强度的传播模型法&#xff0c;是指使用当前环境下假设的某种信道衰落模型&#xff0c;根据其数学关系估计终端与已知位置 AP 间的距离&#xff0c…

室内定位——UWB测距及定位原理

关注、星标公众号&#xff0c;直达精彩内容 来源&#xff1a;平行机器人 整理&#xff1a;李肖遥 我们都知道卫星信号在室内会被严重影响&#xff0c;从而导致GPS或是北斗无法定位。所以在室内定位主要采用无线通讯、基站定位、惯导定位等多种技术集成形成一套室内位置定位系统…

【可见光室内定位】(一)概览

目录 一、室内无线定位技术概况二、研究现状三、应用前景背景 一、室内无线定位技术概况 二、研究现状 得益于可见光通信&#xff08;&#xff36;&#xff2c;&#xff23;&#xff09;技术的迅速发展&#xff0c;可 见光定位&#xff08;&#xff36;&#xff2c;&#xff…

室外定位靠卫星 室内定位又如何?

人类为了不让自己迷失在茫茫大自然中&#xff0c;先后发明罗盘、指南针等工具&#xff0c;卫星定位的问世&#xff0c;解决了“我在哪里”的问题。 如今物联网是“信息化”时代的重要发展阶段&#xff0c;随着社会信息化水平的普遍提高&#xff0c;其社会的重要性日益显现。 云…

室内定位之5G定位

目录 一、前言 二、蜂窝网 三、5G引入哪些技术 五、5G室内定位研究现状 六、5G室内CSI指纹定位 七、5G室内定位的未来 一、前言 随着5G通信基础设施逐步完善&#xff0c;5G网络的优势一方面在于其具有的更大的带宽和子载波间隔&#xff0c;使得5G室内定位精度提升(3.5GH…

室内定位——视觉方法的发展

转载自&#xff1a;室内定位——从入门到出家&#xff08;二&#xff0c;视觉&#xff09; 作者其他文章&#xff1a; 室内定位——从入门到出家&#xff08;一&#xff09; 室内定位——从入门到出家&#xff08;三&#xff0c;近红外&#xff09; 室内定位——从入门到出家&a…

室内定位

室内定位调研 1.蓝牙定位 1&#xff09;背景 蓝牙室内技术是利用在室内安装的若干个蓝牙局域网接入点&#xff0c;把网络维持成基于多用户的基础网络连接模式&#xff0c;并保证蓝牙局域网接入点始终是这个微微网(piconet)的主设备&#xff0c;然后通过测量信号强度对新加入的…