首页 > 其他分享 >大端小端、MSB和LSB、字节序和比特序

大端小端、MSB和LSB、字节序和比特序

时间:2024-07-14 15:31:16浏览次数:13  
标签:小端 存储 LSB 字节 处理器 先行 大端 数据

CPU架构决定大小端模式_cpu架构与大小端的关系-CSDN博客
常见处理器大小端_大端系统有哪些-CSDN博客

大端存储、小端存储

端序(英语:Endianness),又称字节顺序,又称尾序,在计算机科学领域中,指存储器中或在数字通信链路中,组成多字节的字的字节的排列顺序。
大小端存储的关系主要涉及数据在内存中的存储方式,这与处理器的设计密切相关。大小端存储指的是多字节数据类型(如整数、浮点数)在内存中的字节排列顺序。不同的处理器架构可能采用不同的存储模式。例如,Intel的x86系列处理器通常使用小端存储模式。
在进行跨平台通信时,必须考虑到存储模式的问题,因为不同架构的计算机之间进行数据交换时,如果不进行适当的字节序转换,可能会导致数据解读错误。

  • 大端存储(Big-Endian):在大端模式下,数据的高位字节(最重要的字节)存放在内存的低地址处,而低位字节(最不重要的字节)存放在高地址处。这种方式直接对应于人类通常书写数值的方式,例如十六进制数0x1234,在大端模式下,内存中的布局就是0x12在前(低地址),0x34在后(高地址)。
  • 小端存储(Little-Endian):在小端模式下,数据的低位字节存放在内存的低地址处,而高位字节存放在高地址处。这意味着,当从低地址开始读取时,最先读到的是数据的低位字节。

小端,低地址低字节;大端,低地址高字节

处理器存储模式

ARM架构的处理器默认使用小端模式(Little-Endian),但有些处理器支持大端模式(Big-Endian)并可以通过配置进行切换。以下是一些支持大端模式的ARM处理器:

  1. ARM Cortex-A系列:许多Cortex-A系列处理器支持大端模式。
  2. ARM Cortex-R系列:一些Cortex-R系列处理器也支持大端模式。
  3. ARM Cortex-M系列:ARM Cortex-M系列处理器默认使用小端模式。不过,Cortex-M系列处理器也支持大端模式(Big-Endian),可以通过配置进行切换。STM32 默认是小端模式的,STM8 是大端。

大端和小端存储的优缺点

小端存储的优点

  • 简化读取操作:当处理器读取小于其原生字长的数据时,低位字节总是在最低的地址,这使得读取操作更为简单。例如,如果只需要读取一个32位整数的最低16位,可以直接从最低地址开始读取两个字节,而不需要关心整个32位数的其余部分。
  • 高效的数值运算:CPU做数值运算时可以从内存中按顺序依次从低位到高位取数据进行运算,直到最后刷新最高位的符号位,这样的运算方式会更高效。
  • 简化数据转换:内存的低地址处存放低字节,所以在强制转换数据类型时不需要调整字节的内容。

大端存储的优点

  • 直观性:大端存储方式符合人类的直观认识,即高位优先。因此,对于有符号整数和浮点数的表示,大端存储可以更容易地解释为十进制数。
  • 符号位判断:符号位在所表示的数据的内存的第一个字节中,便于快速判断数据的正负和大小。
  • 网络通信:大端存储方式在网络通信中具有优势,许多网络协议(如TCP/IP)规定数据必须是高位先行,这样可以确保不同设备之间的兼容性和通信的一致性。

高位先行MSB 、低位先行LSB

传输位序一般用于描述串行设备的传输顺序。网络协议中只有数据链路层的底端会涉及到。
高位先行即在传输一个字节的时候先传输高位msb;低位先行即在传输一个字节的时候先传输低位lsb。高位先行和低位先行是针对串行数据传输方式来说的。常见的串行传输方式有串口(UAR)、I2C、SPI等。以串口传输方式为例,标准的串口传输方式是低位先行,芯片在通过TX引脚发送数据时,依次发送位0、位1……位7。

协议类型 协议名称 备注
小端序(先传低位) RS-232
RS-422
RS-485
USB(串口)
以太网 虽然高字节先传,但每一字节内低位先传
大端序(先传高位) I2C协议
SPI协议
摩尔斯电码

高位先行(Most Significant Bit first)

高位先行(MSB先行)是指在数据传输过程中,数据的最高有效位(Most Significant Bit,即数值最大的那一位)首先被发送。这种设计在许多串行通信协议中被采用。

高位先行的优势

  • 提前了解数据大小:在处理大量数据时,接收方可以更早地知道传输的数据的大致大小,从而更有效地进行数据处理。
  • 标准化和兼容性:许多标准化的通信协议规定了高位先行,这样可以确保不同设备之间的兼容性和通信的一致性。
  • 数据传输的正确性和效率:采用高位先行可以确保数据传输的正确性和效率,特别是在需要严格遵循协议规范的情况下。

低位先行(Least Significant Bit first)

低位先行(LSB先行)是指在数据传输过程中,数据的最低有效位(Least Significant Bit,即数值最小的那一位)首先被发送。这种设计在一些串行通信协议中被采用。

低位先行的优势

  • 与存储方式一致:许多处理器内部采用小端模式存储数据,因此在数据传输时使用小端先行可以减少数据转换的开销。
  • 简化硬件设计:在某些硬件设计中,小端先行可以简化数据传输和处理的逻辑。

单片机内的小端先行和传输的大端先行
STM32单片机内部使用的小端先行(Little-Endian)存储方式和ISP(In-System Programming)中数据通常先发送高位(MSB先行)并不冲突。这两者是在不同的上下文中应用的。
小端先行是指在单片机内部,多字节数据类型的存储方式,即数据的低位字节存储在低地址处。而ISP中的MSB先行是指在串行数据传输过程中,数据位的发送顺序,即数据的最高有效位(MSB)先发送。
在进行ISP编程时,通常会有一个协议转换过程,将单片机内部存储的数据按照串行通信协议的要求进行位顺序的调整。因此,尽管单片机内部的数据是以小端方式存储的,但在通过串行接口发送时,可以按照协议规定的MSB先行方式发送数据。这样的设计允许单片机与外部设备或编程工具之间进行有效的数据交换,同时保持内部数据处理的效率。
总的来说,小端先行和MSB先行是两种不同的概念,分别应用于内部数据存储和外部数据传输,它们各自适用于不同的场景和需求,但在实际应用中可以通过适当的转换来兼容。这种灵活性是现代微控制器设计中的一个重要特点。

字节序、比特序

  • 字节序主要用于描述多字节数据在内存中的存储顺序和传输顺序,常见于处理器架构和网络协议中。
  • 比特序主要用于描述单个字节内比特的排列顺序,常见于串行通信协议中。

字节序(Byte Order)

字节序指的是多字节数据在内存中的排列顺序。主要有两种类型:

  1. 大端序(Big-Endian):最高有效字节(Most Significant Byte, MSB)存储在内存的低地址处。
  2. 小端序(Little-Endian):最低有效字节(Least Significant Byte, LSB)存储在内存的低地址处。
//大端序
地址: 0x00 0x01 0x02 0x03
数据: 0x12 0x34 0x56 0x78

//小端序
地址: 0x00 0x01 0x02 0x03
数据: 0x78 0x56 0x34 0x12
字节序类型 解释
CPU字节序 指处理器在内存中存储多字节数据的顺序。小端序(Little-Endian)和大端序(Big-Endian)是两种常见类型。
外部Bus字节序 指外部总线在传输多字节数据时的顺序,由总线协议定义。
设备字节序 指外部设备在传输和存储数据时的字节顺序,通常遵循其支持的协议的字节序。
网络协议字节序 指网络协议在传输数据时使用的字节顺序,大多数网络协议采用大端序。
Ethernet协议字节序 指以太网协议在传输数据时的字节顺序,采用大端序。
IP协议字节序 指IP协议在传输数据时的字节顺序,采用大端序。
编译字节序 指编译器在生成代码时使用的字节顺序,编译器根据目标处理器的字节序生成相应的代码。

比特序(Bit Order)

比特序指的是单个字节内比特的排列顺序。主要有两种类型:

  1. MSB先行(Most Significant Bit first):最高有效位(Most Significant Bit, MSB)存储在字节的最低位。
  2. LSB先行(Least Significant Bit first):最低有效位(Least Significant Bit, LSB)存储在字节的最低位。

标签:小端,存储,LSB,字节,处理器,先行,大端,数据
From: https://www.cnblogs.com/banon/p/18301611

相关文章

  • C语言大端存储和小端存储到底有什么区别? 结尾详细题目加深理解
    一.为什么有大端小端模式?        大端模式(Big-endian)和小端模式(Little-endian)是计算机科学中数据存储的一种方式,它们指的是多字节数据类型(如整数、浮点数等)在内存中的字节序(byteorder)。这两种模式的主要区别在于数据的最高有效字节(MSB)和最低有效字节(LSB)的存储位置。......
  • 从零开始学习嵌入式----C语言数据存储(大端与小端)
     目录一、什么是数据中的高位与低位?内存空间中的高地址与低地址?1)内存空间中的低地址与高地址2)数据中的高位与低位二、什么是大端存储与小端存储1)大端存储2)小端存储三、大小端存储方法的测试1)使用指针测试大小端2)使用共用体测试大小端一、什么是数据中的高位与......
  • 西门子的大端模式
    1.大端模式和小端模式大端模式:高位字节地址在内存的低位地址端,低位字节地址在内存的高位地址端。小端模式:高位字节地址在内存的低高地址端,低位字节地址在内存的低位地址端。2.西门子PLC中一个word的表示如图:'IW17=IB17+IB18'其中IB17在高位地址端,IB18在低位地址端......
  • 电脑hold escape key to prevent startlsback怎么处理?
     电脑出现holdescapekeytopreventStartlsBackfrom,一般遇到这种问题之后,一直按住ESC键就没有了。但是还需彻底的解决掉这个问题。首先我们按下“ctrl+alt+del”组合键打开任务管理器,左上角“运行新任务”,输入“control”并确定,就可以打开控制面板,查看方式为“类别......
  • 大小端对齐
    小端对齐与大端对齐1)小端对齐(Little-endian):将低序字节存储在低位地址(低位编址)2)大端对齐(Big-endian):将高序字节存储在低位地址(高位编址)比如一个数据0x12345678,地址0x8000为起始地址,当使用小端对齐时,0x8000存储数据0x78,存储低位数据;当使用大端对齐时,0x8000存储数据0x12......
  • 【CTF MISC】XCTF GFSJ0249 misc_pic_again Writeup(LSB隐写+ZIP压缩包+反汇编)
    misc_pic_againflag=hctf{[a-zA-Z0-9~]*}解法用binwalk扫描,找到zip压缩包。binwalk719af25af2ca4707972c6ae57060238e.png用foremost提取,得到一张看起来一样的图片。foremost719af25af2ca4707972c6ae57060238e.png-o719再次用binwalk扫描,又找到......
  • 小端序题目——[LitCTF 2023]debase64
    还挺有价值的,记录一下题目DIEPE文件在Windows操作系统下默认使用小端序IDAmain函数绿框:输入长度要20红框:base64加密黄框:加密后的结果要与关键数据相等  获取数据,我一般喜欢调试看栈,这样就少一次翻转了 取出15个数据:0x46,0xED,0x18,0x96,0x56,0x9E,0xD2,......
  • 2024年生命科学、基础医学与微生物学国际会议(ICLSBMM2024)
    2024年生命科学、基础医学与微生物学国际会议(ICLSBMM2024)会议简介2024生命科学、基础医学和微生物学国际会议(ICLSBMM2024)将在深圳隆重举行。本次会议汇集了来自世界各地的顶尖专家和学者,讨论生命科学、基础医学和微生物学领域的最新研究成果和发展趋势。会议将涵盖基因......
  • 判断机器大小端的三种方法
    unionUn{inta;charb;};intmain(void){unionUnun;un.a=0x12345678;//此时内存空间确实为0x12345678,但是更改0x78(例如改成0x99)的值会导致判断失误if(un.b==0x78)//具体取决于编译器对联合体的处理方式{//这......
  • 大端和小端的区别
    大端(BigEndian)和小端(LittleEndian)的区别主要体现在字节序的排列上,特别是在多字节数据的存储和传输过程中。以下是两者的详细区别:一、定义与背景大端(BigEndian):指最高有效位(MSB)存储在低位内存地址,而最低有效位(LSB)存储在高位内存地址的方式。这种方式也被称为网络字节序。小......