一文读懂大端、小端、字节序、MSB、LSB、MSBs、LSBs

这篇具有很好参考价值的文章主要介绍了一文读懂大端、小端、字节序、MSB、LSB、MSBs、LSBs。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大端、小端、字节序、MSB、LSB、MSBs、LSBs

5分钟完全理解上述嵌入式、物联网开发中很扯蛋的几个被玩坏概念。

MSB、LSB?

对于涉及 bit 流的概念中

MSB(Most Significant Bit):最高有效位,二进制中代表最高值的比特位,这一位对数值的影响最大。
LSB(Least Significant Bit):最低有效位,二进制中代表最低值的比特位。
msb存储,ESP,C/C++,单片机,嵌入式硬件,物联网,iot,mcu

以字面值数字 9 为例,其二进制是 1001。

  • 如果其 MSB 发生错误,即最高位的 1 发生错误变为了0,则整个数字就变为了 1。误差为8。
  • 如果其 LSB 发生错误,即最低位的 1 发生错误变为了0,则整个数字就变为了 8。误差为1。

MSBs、LSBs

一个 8bit 的数据 10001111 中有两种 7bit 的数据:
msb存储,ESP,C/C++,单片机,嵌入式硬件,物联网,iot,mcu

  • 7bit MSBs:这种写法通常指的是高 7bit:1000111
  • 7bit LSBs:这种写法通常指的是低 7bit:0001111

对于涉及 byte 流的概念中

MSB(Most Significant Byte):多字节序列中最高权重的一个字节。
LSB(Least Significant Byte):多字节序列中最小权重的字节。
msb存储,ESP,C/C++,单片机,嵌入式硬件,物联网,iot,mcu

如何确认 MSB、LSB 代表的具体含义?

具体如何区分MSB(Most Significant Bit)与 MSB(Most Significant Byte)?
看具体的使用场景,如果对象是一个与 bit 流相关的概念(比如数据传输领域,标准的串口传输方式是低位先行,芯片在通过TX引脚发送数据时,依次发送位0、位1、、、、、位7。),则 MSB此时是(Most Significant Bit)。
如果是一个与 byte 相关的概念(如在32位机器上一个整型数据在内存上存储顺序),则是一个 (Most Significant Byte). 主要看讨论的对象是一个 bit 流,还是存储、传输时的 byte 流。

什么是字节序?

字节序,指的是占用多个字节的数据在嵌入式设备的内存中或在网络通信链路中的字节排列顺序。
字面值 0x12345678,其一共有 4 个字节,这四个字节按照字面值的 低位 -> 高位 的顺序分别是:0x78、0x56、0x34、0x12。
它们在内存存储、网络传输中的顺序可能是:

  • 第一种可能:0x12、0x34、0x56、0x78
  • 第二种可能:0x78、0x56、0x34、0x12
    给这两种可能起一个看起来更专业的名字,就有了大端字节序、小端字节序的名称,简称大端序(Big-Endian)、小端序(Little-Endian)。
    一副图表示两种字节序:
    msb存储,ESP,C/C++,单片机,嵌入式硬件,物联网,iot,mcu
  • 大端序(Big-Endian)将字面值的低位字节存放在内存的高位地址(或者在网络传输中发送端先发送高字节,接收端把接收到的第一个字节当作高位字节看待)。
  • 小端序(Little-Endian),将字面值的低位放在较小的地址处(或者在网络传输中先传输低字节)。

为什么有字节序

计算机内存单元的特性,小端字节序通常加载运行效率比较高,比较喜欢小端序。网络传输中先传输对数据影响最重要的部分,自然是让接收端先接收高位字节(参考上面 Most Significant Byte 的介绍)。通常网络字节序就是大端字节序。

编写程序确认当前设备的大小端字节序。

嵌入式面试中总是有这样的问题,编写一个测试程序啊小伙伴:文章来源地址https://www.toymoban.com/news/detail-550048.html

bool check_endian()
{
	union test {
		uint8_t u8;
		int i32;
	}test;
	test.i32 = 1;
	return (test.u8 == 0);
}
int main()
{
	if (check_endian() == true)
		printf("big\n");
	else
		printf("little\n");

	return 0;
}

总结

  1. MSB 可能指 MSB(Most Significant Bit)或者 MSB(Most Significant Byte)。同理,LSB可能指LSB(Least Significant Bit)或者(Least Significant Byte)具体指的是 Bit 还是 Byte,需要结合上下文语境进行判定。
  2. MSBs:这种写法通常指的是高位的几个 bit,LSBs:这种写法通常指的是几位的几个 bit。
  3. 字节序,指的是占用多个字节的数据在嵌入式设备的内存中或在网络通信链路中的字节排列顺序。字节序有大端、小端之分,网络字节序是大端字节序。
    (谢谢点赞或收藏,助力工程师文化越来愈好)

到了这里,关于一文读懂大端、小端、字节序、MSB、LSB、MSBs、LSBs的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大端和小端

    大端(Big Endian)和小端(Little Endian)是两种不同的字节序排列方式,用于解释多字节数据在内存中的存储顺序。 在大端字节序中,高位字节(最高有效位)存储在低位地址,低位字节(最低有效位)存储在高位地址。简单来说,就是数据的高位字节先存储在内存的低地址,

    2024年02月13日
    浏览(31)
  • 1. 大端法和小端法

    一个 int32_t 是4个字节,在内存中的存储是高位字节在低地址,低位字节在高地址。 (数字)前者的高低是数字位数的高低,左边是高位数,右边是低位数; (地址)后者的高低是内存中的地址的大小,大的值就是高地址。 大端法: 小端法: 网络程序要考虑字节序的问题。

    2023年04月17日
    浏览(40)
  • keil_arm 大端小端 寄存器 栈

    @栈result   

    2024年02月11日
    浏览(34)
  • 计算机系统中的大端模式和小端模式

    最近工作中有用到一个知识点,就是大小端,当然这是一个小的知识点,为什么写一个博文呢,我其实是想测试一下chatGPT,所以我开始将自己的想法告诉这个chatbot,让他给我一些写博文的建议,并且给我解答了一些疑惑,今天将自己的学习笔记整理出来展示给大家(by the

    2024年02月03日
    浏览(35)
  • C#和Java的大端位和小端位的问题

    C#代码里就是小端序,Java代码里就是大端序, 大端位 :big endian,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,也叫高尾端 小端位 :little endian,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,也叫低尾端 这个

    2024年02月12日
    浏览(32)
  • 一文读懂“大语言模型”

    本文基于谷歌云的官方视频:《Introduction to Large Language Models》 ,使用 ChatGPT4 整理而成,希望对大家入门大语言模型有帮助。 本课程主要包括以下 4 方面的内容: 大语言模型的定义 描述大语言模型的用例 解释提示词调优 谷歌的 Gen AI 开发工具介绍 大语言模型是深度学习的

    2024年02月09日
    浏览(60)
  • 一文读懂ThreadLocal

    目录 ThreadLocal 有什么用? 如何使用 ThreadLocal? ThreadLocal 原理了解吗? ThreadLocal 有什么用? 通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。 如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK 中自带的 ThreadLocal 类正是为了解决这样的问题

    2024年02月13日
    浏览(32)
  • 一文读懂Embedding

    “Embedding”直译是 嵌入式、嵌入层 。 简单来说,我们常见的 地图 就是对于 现实地理的Embedding ,现实的地理地形的信息其实远远超过三维,但是地图通过颜色和等高线等来最大化表现现实的地理 信息 。 通过它,我们在现实世界里的文字、图片、语言、视频就能转化为计算

    2024年02月11日
    浏览(42)
  • 一文读懂Websocket

    提示:通过本章节的学习,你想深入了解什么是websocket。 提示:这里可以添加本文要记录的大概内容: 例如:websocket是html5新增的全双工通讯协议,基于Tcp协议,属于应用层协议。 提示:以下是本篇文章正文内容,下面案例可供参考 WebSocket 是一种在单个 TCP 连接上进行全双

    2024年02月16日
    浏览(43)
  • 一文读懂 MySQL 锁

    1.1 什么是锁 锁是计算机用以协调多个进程间并发访问同一共享资源的一种机制。MySQL中为了保证数据访问的一致性与有效性等功能,实现了锁机制,MySQL中的锁是在服务器层或者存储引擎层实现的。 1.2 锁用来解决什么问题 锁是用来解决并发事务的访问问题,我们已经知道事

    2024年02月08日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包