小端格式和大端格式(Little-EndianBig-Endian)

article/2025/9/8 15:27:07

小端格式和大端格式(Little-Endian&Big-Endian)

1 字节序

字节序,也就是字节的顺序,指的是多字节的数据在内存中的存放顺序。

在几乎所有的机器上,多字节对象都被存储为连续的字节序列。

例如:如果C/C++中的一个int型变量 a 的起始地址是&a = 0x100,那么 a 的四个字节将被存储在存储器的0x100, 0x101, 0x102, 0x103位置。

不同的CPU有不同的字节序类型,最常见的有两种:

  • Little-Endian:将低序字节存储在起始地址(低位编址)

  • Big-Endian:将高序字节存储在起始地址(高位编址)

举例说明如下图

image-20220723163908774

然后就牵涉出两大CPU派系:

  • Motorola 6800,PowerPC 970,SPARC(除V9外)等处理器采用Big-Endian方式存储数据;
  • x86系列,VAX,PDP-11等处理器采用Little0Endian方式存储数据。
  • 另外,还有一些处理器像ARM, DEC Alpha的字节序是可配置的。

2 LE(Little-Endian)

最符合人的思维的字节序

地址低位存储值的低位,地址高位存储值的高位。

因为从人的第一观感来说,低位值小,就应该放在内存地址小的地方,也即内存地址低位。反之,高位值就应该放在内存地址大的地方,也即内存地址高位。所以说是最符合人的思维的字节序。

就好比我们从小学的计数法,个位代表的单位值最小,放在最低位,以此类推十位,百位。

优势:长度为1,2,4字节的数,排列方式都是一样的,数据类型转换非常方便。

举个例子:在内存中双字0x01020304(DWORD)和0x1234abcd的存储方式。

内存地址4000400140024003
LE04030201
LE0xcd0xab0x340x12

注:每个地址存1个字节,每个字有4个字节。2位16进制数是1个字节(0xFF=11111111)。

3 BE(Big-Endian)

最直观的字节序

地址低位存储值的高位,地址高位存储值的低位,

只需要把内存地址从左到右按照由低到高的顺序写出,也就是把值按照通常的高位到低位的顺序写出,一个字节一个字节的填充进去即可,直接阅读从低到高的地址里面的数据即可。

举个例子:在内存中双字0x01020304(DWORD)和0x1234abcd的存储方式。

内存地址4000400140024003
BE0x010x020x030x04
BE0x120x230xab0xcd

注:每个地址存1个字节,每个字有4个字节。2位16进制数是1个字节(0xFF=11111111)。

4 为什么要注意字节序

如果你写的程序只在单机环境下面运行,并且不和别人的程序打交道,那么你完全可以忽略字节序的存在。

但是,如果你的程序要跟别人的程序产生交互呢? 比如,当一个 C/C++ 的程序要与一个 Java 程序交互时:

  • C/C++语言编写的程序里数据存储顺序是跟编译平台所在的CPU相关的,而现在比较普遍的 x86 处理器是 Little Endian
  • JAVA编写的程序则唯一采用 Big Endian 方式来存储数据

试想,如果你的C/C++程序将变量 a = 0x12345678 的首地址传递给了Java程序,由于Java采取 Big Endian 方式存储数据,很自然的它会将你的数据翻译为 0x78563412。显然,问题就出现了!!!

另外,网络传输一般采用 Big Endian,也被称之为网络字节序,或网络序。当两台采用不同字节序的主机通信时,在发送数据之前都必须经过字节序的转换成为网络字节序后再进行传输。

5 判断机器的字节序

由于 C/C++ 存储数据时的字节序依赖所在平台的CPU,所以我们可以通过C/C++程序判定机器的端序:

void Endianness()
{int a = 0x12345678;if( *((char*)&a) == 0x12)cout << "Big Endian" << endl;elsecout << "Little Endian" << endl;
}

参考文献

小端格式和大端格式(Little-Endian&Big-Endian) - 清风行云 - 博客园

字节序:Big Endian 和 Little Endian | 神奕的博客


http://chatgpt.dhexx.cn/article/F6G8nKlB.shtml

相关文章

BIG-ENDIAN VS LITTLE-ENDIAN

1. 计算机硬件有两种储存数据的方式&#xff1a;大端字节序&#xff08;big endian&#xff09;和小端字节序&#xff08;little endian&#xff09;。 举例来说&#xff0c;数值0x2211使用两个字节储存&#xff1a;高位字节是0x22&#xff0c;低位字节是0x11。 字节序&…

什么是字节序? Big-Endian vs Little-Endian 举例说明

计算机只理解二进制。这意味着 0 和 1 构成了计算机使用的语言。 一位是 0 或 1 。8 位组成一个字节。从这些简单的部分&#xff0c;我们可以构建极其复杂的连接计算机系统来渲染视频、显示来自世界各地的文本并计算极其复杂的算法。 一些数据&#xff08;一些英文字符&#…

java -- Big Endian and Little Endian 大端和小端概念讲解及如何转换

什么是大端、小端&#xff1f; 字节是计算机中数据处理的基本单位。 计算机中以字节为单位存储和解释信息&#xff0c;规定一个字节由八个二进制位构成&#xff0c;即1个字节等于8个比特&#xff08;1Byte8bit&#xff09;。 计算机进行数据处理时&#xff0c;一次存取、加工和…

浅谈大小端(Endian)与位域

目录 字节序 位序 常见位序的错误理解 以太网的大小端 以太网的字节序 以太网的位序 位域中的大小端 位域遇上大小端以太网通信 大端CPU发送 小端CPU发送 位域大小端问题的解决措施 大小端问题浪费了太多应用、驱动、逻辑工程师太多的时间&#xff0c;无时无刻都有人…

Endian

字节序&#xff08;Endian&#xff09;即字节顺序&#xff08;Byte-Order&#xff09;&#xff0c;又称为端序或尾序&#xff08;Endianness&#xff09;。描述的是计算机如何组织字节组成对应的数字&#xff0c;是多字节数据存储和传输时字节的顺序&#xff0c; 是多字节数据在…

一个神奇的网站 Papers with code

这个网站会把某个方向的 论文和代码总结出来。 有助于提高个人效率。 https://paperswithcode.com/sota

这是一个神奇的网站

2012年1月9日&#xff0c;下午2点&#xff0c;打开www.12306.cn.硬是提交了100多次才进入这个神奇的网站。结果又提交了100多次订单才成功了&#xff0c;很不幸运的是尼玛硬座的&#xff0c;等等是无号的...

【工具】sci-hub:一个神奇的免费下载文献的网站

title: “【工具】sci-hub&#xff1a;一个神奇的免费下载文献的网站” date: 2019-09-20T10:44:5508:00 lastmod: 2019-09-20T10:44:5508:00 tags: [“工具”,“sci-hub”] categories: [“工具”] sci-hub&#xff1a;一个神奇的免费下载文献的网站&#xff08;使用技巧&…

最近发现的几个神奇CS学习网站

最近发现的几个CS学习网站&#xff0c;真的灰常良心&#xff0c;希望自己以后少吃瓜&#xff0c;多看看别人的路线和学习笔记。 一、北大信科大佬的CS笔记 https://csdiy.wiki/#_8 自己也是打算学习各种国外的优质课程&#xff08;最近在学CS224n课程和做对应的project&…

冷门但超级有用的神奇网站推荐

给大家介绍一些神奇的具有强大功能的网站&#xff0c;有些功能特别的有用 查询名下手机号 https://getsimnum.caict.ac.cn 查询内容将以短信的形式下发到手机&#xff0c;一个人一天只能查询一次&#xff0c;因为是工信部出品的&#xff0c;所以安全性十分有保障 查询手机号…

快速下载一个网站

有时候我们需要分析一个网站&#xff0c;或者基于一个网站进行魔改&#xff0c;这个就需要一些特殊的手段将网站源码下载到本地了&#xff0c;其实目前大部分网站都是有代码压缩的&#xff0c;很难去有修改。 这里我就教大家如何快速获取一个网站的所有资源&#xff0c;包括源码…

给理工男女的一个神奇网站!

2018 AI开发者大会是一场由中美人工智能技术高手联袂打造的AI技术与产业的年度盛会&#xff01;这里有15硅谷实力讲师团、80AI领军企业技术核心人物、100技术&大众实力媒体、1500AI专业开发者——我们只讲技术&#xff0c;拒绝空谈&#xff01; 参加 2018 AI开发者大会&…

推荐一个命名变量的神奇网站 CODELF

推荐一个命名变量的神奇网站 CODELF 在我们写程序的时候&#xff0c;总是需要去给各种变量命名。于是各种命名大法都上来了&#xff0c;有拼音的&#xff0c;有首字母缩写的&#xff0c;各种各样。而我们推荐的命名肯定是英文的驼峰命名。今天给大家推荐一个网站&#xff1a;h…

mc神奇宝贝服务器网站,我的世界1.12.2 master 神奇宝贝服务器

———— 服务器名称&#xff1a;master—神奇宝贝 ———— 服务器版本&#xff1a;1.12.2 ———— 服务器类型&#xff1a;神奇宝贝 ———— 服务器的IP&#xff1a;进群下载客户端 ———— 服务器QQ群&#xff1a;609019804 ———— 服务器特色 游戏模式&#xff1a;休闲…

Craigslist :一个神奇的网站

转载&#xff1a;https://blog.naaln.com/2017/05/a-magic-website-raigslist/ 今天在看书的时候看到一个问题&#xff0c;什么是一个好产品&#xff1f;是好用的&#xff0c;还是好看的&#xff1f; 显而易见&#xff0c;应该是一个好用的产品。有什么产品是特别好看&#xff…

codewars 一个很神奇的网站

今天闲着无聊&#xff0c;逛推酷&#xff0c;无意间发现了一篇很有意思的帖子&#xff0c;帖子里写了国外的一个很有意思的网站&#xff0c;叫codewars &#xff0c;这个网站的宗旨是把写代码 当成像打怪升级一样。上面有很多的题目&#xff0c;你可以用你熟悉的语言答题&…

p站,一个神奇的网站

说起p站&#xff0c;不少人老司机肯定想到的是那一个p站&#xff0c;但今天我要说的是另一个----pixiv&#xff0c;一个插画网站。 不知道什么原因&#xff0c;网站在国内被墙了&#xff0c;想弄个随机图片还得翻墙&#xff0c;但由于服务器网速实在太慢了&#xff0c;只能网上…

记录一个神奇的网站

Aurorahttps://arr003.network/

给理工男女的一个神奇网站

十一长假已经只剩下最后两天&#xff0c;你给自己定下的假期学习计划进展如何&#xff1f; 你是在家&#xff0c;还是在想家&#xff0c;还是在其他国家&#xff1f; 为了让家里蹲的诸位不虚度光阴&#xff0c;也为了让那些堵在高速路上的童鞋打发时间&#xff0c;现隆重给大家…

五个私藏已久的神奇网站,你想要的全都有

1⃣️悦音配音 一款非常实用的创作工具&#xff0c;做各种风格的配音&#xff0c;提取你想要的视频文案或音频文案&#xff0c;导入图片&#xff0c;一键生成三联封面&#xff0c;无水印视频下。 2⃣️万有导航 聚合资源网站&#xff0c;一个庞大的资源整合神仙网站&#xff…