0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

你真的懂CPU大小端模式吗?

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 作者:黄工的嵌入式技术 2020-02-27 16:46 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

通信协议中的数据传输、数组的存储方式、数据的强制转换等这些都会牵涉到大小端问题。 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))

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信协议
    +关注

    关注

    28

    文章

    1094

    浏览量

    42338
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11320

    浏览量

    225834
  • 计算机系统
    +关注

    关注

    0

    文章

    292

    浏览量

    25337
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深入解析ISL6721:灵活的单电流模式PWM控制器

    深入解析ISL6721:灵活的单电流模式PWM控制器 控制器概述 ISL6721是一款低功耗、单脉冲宽度调制(PWM)电流模式控制器,专为广泛的DC/DC转换应用而设计,包括升压、
    的头像 发表于 04-12 16:15 922次阅读

    使用MoonBit和Raylib构建原生移动游戏

    当你想做一个简单的手机游戏,比如 Flappy Bird、2048、贪吃蛇——的第一反应可能是打开 Unity 或者 Godot。但有没有想过:对于一个只需要画几个矩形和圆的游戏,真的
    的头像 发表于 03-14 11:21 815次阅读
    使用MoonBit和Raylib构建原生移动<b class='flag-5'>端</b>游戏

    自动驾驶仿真新范式:aiSim如何解决智驾测试的&quot;灾难性挑战&quot;

    。然而,这种变革对仿真测试带来了"灾难性挑战"——传统仿真方法因感知与规控接口的消失而亟待重构。 2 aiSim:智驾仿真的全链路解决方案 2.1 核心架构创新 康谋科技的aiSim采用XIL架构仿真方案,基于软件定义接口
    的头像 发表于 12-17 14:15 418次阅读
    <b class='flag-5'>端</b>到<b class='flag-5'>端</b>自动驾驶仿真新范式:aiSim如何解决智驾测试的&quot;灾难性挑战&quot;

    CodeGenie AI辅助开发意图,让小艺“看见”的鸿蒙应用

    手机越来越我们了。说一句“查看我待取件的快递”,它就能精准打开快递软件服务卡片;说“播放Dream It Possible”,它就能拉起音乐 App 播放对应歌曲。这背后
    的头像 发表于 12-10 15:12 517次阅读
    CodeGenie AI辅助开发意图,让小艺“看见”<b class='flag-5'>你</b>的鸿蒙应用

    智驾模拟软件推荐——为什么选择Keymotek的aiSim?

    随着自动驾驶技术的快速发展,车企和科技公司对于模拟测试平台的需求越来越强。从L2/ADAS到L4/L5等级的自动驾驶,虚拟模拟已经成为其中的关键一环。特别是对于「」智驾(
    的头像 发表于 11-18 11:35 940次阅读

    嵌入式系统必的 20 个寄存器

    了嵌入式系统中开发者必的20个寄存器,让快速掌握MCU的核心操作方法。01寄存器基础寄存器是CPU内部用于高速存取数据的小容量存储单元,是计算机执行指令、处理
    的头像 发表于 11-14 10:28 1342次阅读
    嵌入式系统必<b class='flag-5'>懂</b>的 20 个寄存器

    Sleep模式与DeepSleep 模式介绍

    ●Sleep 模式 在 Sleep 模式下,CPU 停止运行,所有外设保持工作,并且可以在发生中断或事件的时候唤醒 CPU。 ●DeepSleep
    发表于 11-13 07:14

    触控板的“大小之争”,真的只是数字差异?

    在笔记本电脑的使用体验中,触控板是仅次于键盘的核心交互部件。不少用户在选择设备时会疑惑:大触控板和小尺寸触控板,难道仅仅是面积大小不同吗?实则不然。从日常操作的流畅度到复杂功能的实现,从单一
    的头像 发表于 10-30 15:32 706次阅读

    CPU真的有黄金:看完秒

    在大家的印象中,黄金是珠宝、投资品和工业原料,但很少有人知道,我们每天使用的电脑CPU里竟然也隐藏着这种贵金属。那为什么芯片会用到黄金,一颗CPU中能有多少纯金呢?不依靠专业设备能提取出来吗?
    的头像 发表于 08-30 15:41 6438次阅读

    请问支持100条 IPSecVPN LAN-LAN模式 的中心设备有哪些型号?

    支持100条 IPSecVPN LAN-LAN模式 的中心设备有哪些型号?
    发表于 08-07 06:34

    低功耗单片机工作模式是怎样的?看完这篇就懂了!

    主动模式、空闲模式、停机模式和待机模式等,不同模式通过关闭CPU、外设时钟或切断部分电路供电实现
    的头像 发表于 07-14 10:39 837次阅读
    低功耗单片机工作<b class='flag-5'>模式</b>是怎样的?看完这篇<b class='flag-5'>你</b>就懂了!

    真的树莓派5嘛?树莓派5引脚图全面指南:理解GPIO引脚及其功能!

    树莓派5上的GPIO通用输入/输出(GPIO)引脚是树莓派上的物理连接器,允许树莓派与传感器、LED、电机等外部电子元件进行交互。这些引脚可编程设置为输入模式,用于从外部源(如传感器)接收数据;也
    的头像 发表于 07-04 15:27 3807次阅读
    <b class='flag-5'>你</b><b class='flag-5'>真的</b><b class='flag-5'>懂</b>树莓派5嘛?树莓派5引脚图全面指南:理解GPIO引脚及其功能!

    充电接口真的了解吗?

    USB(Universal Serial Bus,通用串行总线)自1994年诞生以来,已成为我们日常生活中不可或缺的接口标准。从键盘、鼠标到手机、充电宝,USB接口无处不在。但知道USB接口也有
    的头像 发表于 05-18 17:39 5329次阅读

    怎么设置寄存器使3014工作在块传输模式下,怎么设置包大小为512还是256?

    怎么设置寄存器使3014工作在块传输模式下,怎么设置包大小为512还是256? 我现在一个包需要512个点,这波形看起来是256个数据一个包
    发表于 05-08 07:45

    一文读懂:MCX 插头大小差异带来的影响与应用区别

    科技的世界里,每一个参数的细微差别,都像是藏在精密仪器里的悄悄话。MCX 插头的大小差异,也只有真正它的工程师、技术人员,才能理解其中的精妙之处。有些情绪,只想说给的人听;而这些关于连接与传输
    的头像 发表于 04-24 18:02 981次阅读
    一文读懂:MCX 插头<b class='flag-5'>大小</b>差异带来的影响与应用区别