news 2026/4/23 6:41:21

简单理解:二进制权重、LSB/MSB 与大小端序!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
简单理解:二进制权重、LSB/MSB 与大小端序!

在嵌入式开发、数据通信中,单个字节(1 Byte) 是最基础的数据单元(等于 8 个比特位,1 Byte = 8 bit),也是理解二进制权重、LSB(最低有效位)、MSB(最高有效位)的核心载体 —— 所有位级别的规则,都围绕单个字节展开!

嵌入式开发中,串口通信数据错乱、内存存储读取异常?大概率是没搞懂二进制权重、LSB/MSB、大小端序这组 “黄金三角”!三者环环相扣,一篇讲透所有核心逻辑~

一、 二进制权重:左高右低是永远的铁律

权重是二进制每一位的 “数值分量”,核心规则:从右往左,位数越高,权重越大,也就是我们常说的左高右低

以 1 字节数据0x03(二进制0000 0011)、2 字节数据0x1234(二进制0001 0010 0011 0100)为例,权重分布如下:

1 字节位序号(右 0 起始)76543210
0x03二进制值00000011
权重(2ⁿ)1286432168421
2 字节位序号(右 0 起始)1514...876...0
0x1234二进制值00...100...0
权重(2ⁿ)3276816384...25612864...1
  • 计算逻辑:第n位的权重 = 2 的n次方(2ⁿ);
  • 数值计算:0x03=1×2⁰+1×2¹=3,0x1234=4×2⁰+3×2⁴+2×2⁸+1×2¹²=4660;
  • 关键:权重规则不会因传输 / 存储方式改变,是所有操作的基础。

二、 LSB 与 MSB:单个字节的 “高低位标识”

LSB 和 MSB 是针对单个字节(或数据单元)的概念,用于标记 “权重最小 / 最大的位”:

1. LSB:最低有效位(Least Significant Bit)

  • 定义:二进制数中权重最小的位,永远在最右侧(位序号 0);
  • 举例:0x03的位 0(值 1)、0x1234低字节0x34的位 0(值 0)都是 LSB;
  • 特点:对数值影响最小,比如0x03的 LSB 从 1 改 0,数值仅从 3 变 2。

2. MSB:最高有效位(Most Significant Bit)

  • 定义:二进制数中权重最大的位,永远在最左侧(1 字节位 7、2 字节位 15);
  • 举例:0x03的位 7(值 0)、0x1234高字节0x12的位 15(值 0)都是 MSB;
  • 特点:对数值影响最大,比如0x83(10000011)的 MSB 从 1 改 0,数值从 131 变 3。

三、 大小端序:多字节数据的 “存储 / 传输顺序”

当数据超过 1 字节(如0x12340x12345678)时,就需要用大小端序定义 “字节的排列顺序”—— 这和 LSB/MSB 的 “位顺序” 是两个维度,但逻辑相通:

核心定义(以 4 字节数据0x12345678为例)

  • 高字节:权重更大的字节(0x120x340x560x78);
  • 低字节:权重更小的字节(0x78是最低字节,对应 LSB 相关字节)。
存储 / 传输模式定义内存地址分布(地址从低到高)核心逻辑
小端序(Little-Endian)低字节存低地址,高字节存高地址地址 0x00:0x78 → 0x01:0x56 → 0x02:0x34 → 0x03:0x12字节级的 “LSB 优先”:权重小的字节先存 / 先传
大端序(Big-Endian)高字节存低地址,低字节存高地址地址 0x00:0x12 → 0x01:0x34 → 0x02:0x56 → 0x03:0x78字节级的 “MSB 优先”:权重小的字节后存 / 后传

大小端序与 LSB/MSB 的关联

  • 小端序 = 字节级 LSB 优先:和单个字节的 “LSB 优先传输” 逻辑一致,都是 “权重小的先处理”;
  • 大端序 = 字节级 MSB 优先:和单个字节的 “MSB 优先传输” 逻辑一致,都是 “权重小的后处理”;
  • 绝大多数 MCU(ARM、STM32、HC32)默认小端序存储,网络协议(TCP/IP)默认大端序传输

四、 开发实战:避坑关键操作

1. 位传输顺序(LSB/MSB 优先)

用于串口、SPI 等外设的 “单个字节内的位传输”,必须双方统一:

// HC32串口配置:单个字节内 LSB优先传输(嵌入式主流选择) USARTx->MDR = USART_MODE_NORMAL | USART_LSB_FIRST;
  • 错误后果:MCU 设 LSB 优先,上位机设 MSB 优先,发送0x03会被解析为0xC0(数据错乱)。

2. 字节存储 / 传输顺序(大小端序)

  • 存储:MCU 默认小端序,读取多字节数据时无需转换,直接按地址顺序读取即可;
  • 传输:网络通信需将小端序转为大端序(用htonl()/htons()函数),避免跨设备解析错误:
// 示例:小端序MCU发送4字节数据到网络(大端序) uint32_t data = 0x12345678; // 小端存储:0x78,0x56,0x34,0x12 uint32_t net_data = htonl(data); // 转为大端序:0x12,0x34,0x56,0x78

五、 一句话总结

  • 二进制权重:左高右低是铁律;
  • LSB/MSB:单个字节的 “高低位”,LSB 在右、MSB 在左;
  • 大小端序:多字节的 “排列顺序”,小端 = 字节级 LSB 优先(MCU 默认),大端 = 字节级 MSB 优先(网络默认);
  • 核心避坑:位顺序(LSB/MSB)和字节顺序(大小端)需分别与通信方统一!

内存存储的地址增长方向是 “低地址→高地址”(默认连续递增),而小端序(MCU 主流默认)的规则是 “低字节存低地址”—— 两者结合,多字节数据的存储逻辑就是 “低地址存低字节,地址从低到高,字节权重从低到高”,完美匹配字节级的 “LSB 优先”。

用通俗的方式拆解,帮你彻底夯实逻辑:

一、两个核心前提(永远不变的基础)

  1. 内存地址方向:低→高递增内存就像一排连续的 “储物格”,每个格子对应一个字节地址,地址编号从 0 开始依次变大(0x00→0x01→0x02→...),这是硬件设计的固定规则 —— 你可以理解为 “储物格从左到右编号,左边是低地址,右边是高地址”。

  2. 字节高低判定:权重决定多字节数据中,“低字节” 是权重最小的字节,“高字节” 是权重最大的字节(和二进制位 “左高右低” 逻辑一致):示例:4 字节数据0x12345678

    • 低字节:0x78(权重最小,对应 0~7 位)
    • 高字节:0x12(权重最大,对应 24~31 位)

二、小端序的 “完美匹配”:低字节存低地址 + 地址低→高

结合两个前提,小端序的存储逻辑就像 “按权重从小到大,从左到右放字节”:假设0x12345678从低地址0x1000开始存储:

内存地址(左→右 = 低→高)0x1000(最左 = 最低地址)0x10010x10020x1003(最右 = 最高地址)
存储的字节(权重低→高)0x78(最低字节)0x560x340x12(最高字节)
  • 直观理解:左边(低地址)放 “小个子”(低字节),右边(高地址)放 “大个子”(高字节),地址顺序和字节权重顺序完全一致;
  • 硬件优势:CPU 读取数据时,先拿到低地址的低字节,直接就能开始运算(CPU 运算从低位开始),无需额外排序,效率最高。

三、反例对比:大端序的 “错位”(高字节存低地址)

如果是大端序(网络协议默认),规则是 “高字节存低地址”,和地址方向(低→高)相反:

内存地址(左→右 = 低→高)0x1000(最低地址)0x10010x10020x1003(最高地址)
存储的字节(权重高→低)0x12(最高字节)0x340x560x78(最低字节)
  • 问题:CPU 读取时,先拿到高字节,需要先缓存起来,等拿到所有字节后再重新排序(高字节放高位、低字节放低位),才能运算,效率更低。

四、工程实战:记住两个 “默认”,永远不踩坑

  1. 存储默认:MCU(ARM/STM32/HC32)默认小端序 → 低字节存低地址,地址从低→高递增;
  2. 通信默认:网络协议(TCP/IP)、部分外设默认大端序 → 高字节存低地址;
  3. 避坑关键:本地存储 / 处理不用管字节序,跨平台 / 网络通信时,用htonl()(小端→大端)、ntohl()(大端→小端)转换即可。

一句话总结

内存地址天然 “低→高”,小端序天然 “低字节存低地址”—— 两者是嵌入式存储的 “黄金搭档”,也是多字节数据不解析错误的核心保障!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 3:19:58

transformer模型详解之Dropout机制作用分析

Transformer 模型中 Dropout 机制的深度解析 在当前大模型主导的技术浪潮中,Transformer 架构几乎已成为各类智能系统的“通用语言”。从 GPT 到 BERT,再到多模态模型如 CLIP,其核心结构始终离不开自注意力与前馈网络的堆叠。然而&#xff0c…

作者头像 李华
网站建设 2026/4/17 22:06:31

Cocos Creator资源加密终极指南:从安全隐患到完美防护

Cocos Creator资源加密终极指南:从安全隐患到完美防护 【免费下载链接】cocos-engine Cocos simplifies game creation and distribution with Cocos Creator, a free, open-source, cross-platform game engine. Empowering millions of developers to create high…

作者头像 李华
网站建设 2026/4/23 1:50:19

sdat2img工具:Android系统镜像转换终极指南

sdat2img工具:Android系统镜像转换终极指南 【免费下载链接】sdat2img Convert sparse Android data image to filesystem ext4 image 项目地址: https://gitcode.com/gh_mirrors/sd/sdat2img 在Android系统定制和刷机过程中,开发者经常会遇到一个…

作者头像 李华
网站建设 2026/4/19 9:02:51

PostgreSQL与Mybatis深度集成:解锁高效数据操作新境界

PostgreSQL与Mybatis深度集成:解锁高效数据操作新境界 【免费下载链接】Mapper Mybatis Common Mapper - Easy to use 项目地址: https://gitcode.com/gh_mirrors/ma/Mapper 在数据驱动的时代,PostgreSQL作为功能最强大的开源关系数据库&#xff…

作者头像 李华
网站建设 2026/4/16 23:37:55

【C语言开发RISC-V AI芯片】:揭秘硬件加速层编程核心技术

第一章:C语言开发RISC-V AI芯片概述随着人工智能与边缘计算的快速发展,RISC-V架构因其开源、可扩展等优势,成为AI芯片设计的重要选择。结合C语言这一高效、贴近硬件的编程语言,开发者能够在RISC-V平台上实现高性能AI算法的部署与优…

作者头像 李华
网站建设 2026/4/18 16:36:29

DeepSeek-R1-Distill-Llama-8B实战指南:5步打造企业级AI应用

DeepSeek-R1-Distill-Llama-8B实战指南:5步打造企业级AI应用 【免费下载链接】DeepSeek-R1-Distill-Llama-8B 项目地址: https://ai.gitcode.com/openMind/DeepSeek-R1-Distill-Llama-8B DeepSeek-R1-Distill-Llama-8B作为基于Llama-3.1-8B架构的推理优化模…

作者头像 李华