当前位置:首页 > 嵌入式 > 嵌入式大杂烩
[导读]通信协议中的数据传输、数组的存储方式、数据的强制转换等这些都会牵涉到大小端问题。 CPU的大端和小端模式很多地方都会用到,但还是有许多朋友不知道,今天暂且普及一下。 一、为什么会有大小端模式之分呢? 因为在计算机系统中,我们是以字节为单位的,每个



通信协议中的数据传输、数组的存储方式、数据的强制转换等这些都会牵涉到大小端问题。


CPU的大端和小端模式很多地方都会用到,但还是有许多朋友不知道,今天暂且普及一下。

一、为什么会有大小端模式之分呢?


因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。


但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的int型。另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。


例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。


对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。



二、什么是大端和小端?
大端模式: 是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。


小端模式: 是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。

假如32位宽(uint32_t)的数据0x12345678,从地址0x08004000开始存放:

地址 小端存放内容 大端存放内容
0x08004003 0x12 0x78
0x08004002 0x34 0x56
0x08004001 0x56 0x34
0x08004000 0x78 0x12



再结合一张图进行理解:




从上面表格、图可以看得出来,大小端的差异在于存放顺序不同

在维基百科中还有有一段关于“端的起源”:




三、数组在大端小端情况下的存储
以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf[4]来表示value。

1.大端模式下


地址 数组 位置
高地址 buf[3] 0x78 低位
- buf[2] 0x56 -
- buf[1] 0x34 -
低地址 buf[0] 0x12 高位



2.小端模式下


地址 数组 位置
高地址 buf[3] 0x12 低位
- buf[2] 0x34 -
- buf[1] 0x56 -
低地址 buf[0] 0x78 高位



不知道大家对数组进行强制转换成整型数据没有?

如果你要进行强制转换,肯定要考虑大小端问题。

四、大小端谁更好?


小端模式:强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。

大端模式:符号位的判定固定为第一个字节,容易判断正负。


总结:大端小端没有谁优谁劣,各自优势便是对方劣势。


五、常见字节序

常见的操作系统是小端,通讯协议是大端。


1.常见CPU的字节序

大端模式:PowerPC、IBM、Sun

小端模式:x86、DEC

ARM既可以工作在大端模式,也可以工作在小端模式。

(内容来自网络)

2.STM32属于小端模式

测试一款MCU属于大端,还是小端方法很多种,通过打印数据,通过在线调试查看数据:


当然,在MCU的手册中也有相关说明。


六、大小端转换

开篇说了,实际应用中,大小端应用的地方很多通信协议、数据存储等。如果字节序不一致,就需要转换。


只要你理解其中原理(高低顺序),转换的方法很多,下面简单列列两个。


1.对于16位字数据

左右滑动查看全部代码>>>

#define BigtoLittle16(A) (( ((uint16)(A) & 0xff00) >> 8) | \ (( (uint16)(A) & 0x00ff) << 8))



2.对于32位字数据

左右滑动查看全部代码>>>

#define BigtoLittle32(A) ((( (uint32)(A) & 0xff000000) >> 24) | \ (( (uint32)(A) & 0x00ff0000) >> 8) | \ (( (uint32)(A) & 0x0000ff00) << 8) | \ (( (uint32)(A) & 0x000000ff) << 24))



方法很多种,感兴趣的朋友可自行研究。本文就写到这里,希望对你有帮助。



‧  END  


以上内容转自公众号『strongerHuang』,作者黄工。这里再分享黄工的一些系列文章汇总:

【专栏】STM32CubeMX系列教程

【专栏】μC/OS系列教程

【专栏】CANOpen系列教程



黄工的公众号还汇总很多软硬件干货,推荐关注。 识别下面二维码即可关注。


长按前往图中包含的公众号关注

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

在数字电路的庞大体系中,加法器是最基础却又至关重要的运算单元。从简单的计算器到复杂的CPU,加法器如同数字世界的“基石”,支撑着几乎所有的算术运算。无论是日常生活中购物时的金额计算,还是航天领域中精密的轨道运算,背后都离...

关键字: 加法器 CPU

在多线程编程的世界里,死锁就像潜伏在代码中的幽灵,时不时就会出来作祟。它让线程们陷入互相等待的僵局,程序看似运行却毫无进展,CPU使用率骤降,排查起来更是让人头疼不已。GDB(GNU调试器)作为Linux平台下的调试利器...

关键字: GDB CPU

在Linux操作系统中,进程管理是核心功能之一,而进程调度与切换则是保障系统高效、稳定运行的关键机制。它们决定了CPU资源如何分配给各个进程,直接影响着系统的响应速度、吞吐量和公平性。

关键字: Linux CPU

在数字化浪潮席卷全球的当下,物联网、嵌入式系统与单片机这三个技术名词频繁出现在科技报道、产业论坛以及校园课堂中。它们看似独立,实则紧密相连,共同构成了推动智能时代发展的核心技术链条。从智能家居里自动调节温度的空调,到工业...

关键字: 单片机 CPU

随着端侧AI和高性能计算需求的快速增长,处理器产业的分工模式正在发生变化。近期,Arm 已发布其自研AI芯片,这一动向也让产业对IP模式的开放性与生态中立性产生了更多关注。

关键字: SoC RISC-V CPU

在嵌入式系统发展历程中,51单片机与STM32单片机无疑是两个具有里程碑意义的产品。诞生于上世纪80年代的51单片机,凭借简单易用、成本低廉的特性,成为无数开发者的入门导师,推动了嵌入式技术的普及;而2003年问世的ST...

关键字: 单片机 CPU

4月2日,在海光信息2026年春季技术沟通会上,海光信息正式公开基于“内生安全”理念的一大批新技术、新成果,并首发海光DCU软件栈年度版本,为业界清晰地描绘出海光双芯产品(CPU、DCU)推动国产万亿大模型研发、加速各行...

关键字: 大模型 CPU DCU

北京2026年4月2日 /美通社/ -- 3月31日,2026年度中国IC设计成就奖在上海举办的国际集成电路展览会暨研讨会期间隆重颁布。作为兆芯面向人工智能、云计算、数据中心、高密度存储等前沿技术与核心应用打造的新一代自...

关键字: IC设计 处理器 CPU 通用处理器

由台达集团于2026年3月29日通过美通社发布新闻稿《集装箱式SST直流移动智算中心发布》中,第3张有误,已进行替换。特此更正,更新后的全文及图片如下: 集装箱式SST直流移动智算中心发布 台达、汉腾科技、龙芯中科携...

关键字: 移动 ST 固态变压器 CPU

面对AI Agent与Physical AI的浪潮,单纯依靠增加GPU或NPU的补丁式方案已难以为继,CPU架构必须进行面向AI的底层重塑。 阿里达摩院发布的玄铁C950旗舰处理器,不仅刷新了单核性能纪录,更通过原生A...

关键字: 玄铁C950 CPU AI 物理AI RISC-V
关闭