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

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

3天内不再提示

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

0BFC_eet_china 来源:电子工程专辑 2020-01-28 15:56 次阅读

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

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

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

    关注

    68

    文章

    10855

    浏览量

    211615
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136714

原文标题:你真的懂CPU大小端模式吗?

文章出处:【微信号:eet-china,微信公众号:电子工程专辑】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    智己汽车“”智驾方案推出,老司机真的会被取代吗?

    与Momenta联合打造的IM AD 3.0到端直觉智能驾驶系统,在结构设计和决策逻辑上,进行了大胆的创新,试图用“直觉化”思维模式替代传统的模块化系统。   IM AD 3.0的技术架构:到端直觉驾驶模型 1.1 模块化与
    的头像 发表于 10-30 09:47 270次阅读
    智己汽车“<b class='flag-5'>端</b>到<b class='flag-5'>端</b>”智驾方案推出,老司机<b class='flag-5'>真的</b>会被取代吗?

    ZCAN PRO解析的DBC Singal 起始位与XNET解析的起始位不同;解析的信号不符合大端逻辑

    上图中的DBC文件使用记事本打开,Data_Field信号,起始位为23,长度为48,大端方式存储;(按照这个方式存储,明显已经溢出) 上图为该信号在ZCANPRO软件中打开,解析的起始位为23
    发表于 10-18 13:53

    非门电路的输入电阻模式怎么设置电平状态

    非门电路的输入电阻模式设置电平状态的方法主要取决于非门电路的类型(如TTL、CMOS等)以及具体的设计需求。以下是一些一般性的指导原则:
    的头像 发表于 10-01 17:43 471次阅读

    CMOS和非门电路的输入电阻模式有什么区别

    CMOS和非门电路的输入电阻模式之间存在一些关键的区别,这些区别主要体现在电阻的作用、连接方式以及对电路性能的影响上。
    的头像 发表于 10-01 17:32 737次阅读
    CMOS和非门电路的输入<b class='flag-5'>端</b>电阻<b class='flag-5'>模式</b>有什么区别

    cmos和非门电路的输入电阻模式是什么

    CMOS和非门电路的输入电阻模式涉及多个方面,包括电阻的作用、连接方式以及如何影响电路性能。以下是对CMOS和非门电路输入电阻模式的详细分析:
    的头像 发表于 10-01 17:30 780次阅读

    字节跳动为旗下车帝筹措资金

    字节跳动近期正全力为其旗下的汽车信息与服务平台车帝筹集资金,旨在进一步巩固并扩大其在汽车领域的市场地位。自去年战略调整后,车帝承担起整合抖音、今日头条及西瓜视频等平台汽车内容的重任,实现了内容
    的头像 发表于 09-26 14:12 266次阅读

    AMC1200采用单工作模式可以吗?

    想用AMC1200采集外部送入的模拟量,输出量送给单片机的AD口,AMC1200采用单工作模式可以?看到的资料用的都是工模输入
    发表于 08-29 06:27

    请问下st有没有32位的大端MCU?怎么找到?

    请问下st有没有 32位的大端MCU 或者怎么样才能找到?我一个个找看手册 太慢了并且都是小
    发表于 08-14 06:04

    2024年Q2客户CPU出货量同比增长10.7%

    根据市场调查机构Jon Peddie Research的最新报告,2024年第二季度全球CPU市场呈现出复杂而有趣的趋势。客户CPU出货量同比增长10.7%,显示出强劲的增长动力,尽管环比略有下降5%。这一增长主要由笔记本
    的头像 发表于 08-12 15:11 520次阅读

    saas模式的一套智慧工地云平台源码,支持多端展示:PC、大屏、手机、平板

    基于微服务架构+Java+Spring Cloud +UniApp +MySql技术开发saas模式的一套智慧工地云平台源码,支持多端展示:PC、大屏、手机、平板
    的头像 发表于 08-06 16:41 344次阅读
    saas<b class='flag-5'>模式</b>的一套智慧工地云平台源码,支持多端展示:PC<b class='flag-5'>端</b>、大屏<b class='flag-5'>端</b>、手机<b class='flag-5'>端</b>、平板<b class='flag-5'>端</b>

    用THP210做单转差分应用,仿真的波形里怎么总有个尖尖?

    用THP210做单转差分应用,输入范围±2.5V。-3dB大概是5Khz。仿真的波形里怎么总有个尖尖。当-3dB带宽大的时候比如100Khz这种,就是很平滑标准的的低通滤波器形状,截至带宽越低就越容易出现峰值尖尖。这是啥情况
    发表于 07-30 06:52

    失调电压/补偿电压真的懂了吗?

    一、概念理解输入失调电压:当运放连接模式为跟随器时,同相接GND,输出并不会输出GND,根据不同运放参数会有微弱电压输出,这个参数就叫做输入失调电压。理想运放:理想运放连接为跟随器模式,并将
    的头像 发表于 07-05 08:11 1739次阅读
    失调电压/补偿电压<b class='flag-5'>你</b><b class='flag-5'>真的</b>懂了吗?

    请问STM32(MDK)默认大端还是小

    STM32(MDK)默认大端还是小
    发表于 04-30 06:02

    字传输不变的3种大小处理方式

    大端,最高字节存储在最低的内存地址,小则是最低有效字节存储在最低的内存地址。在Verilog中实现大端(Big-Endian)和小(Little-Endian)之间的转换通常涉及到
    的头像 发表于 04-02 10:32 619次阅读
    字传输不变的3种大小<b class='flag-5'>端</b>处理方式

    物联网LWIP之socket编程

    Socket的位置,作为用户层与其他层的交互媒介。LWIP实现Socket需要操作系统的帮助,如下图所示。二,Socket编程的基础知识1.大端模式,小模式(1)
    的头像 发表于 01-18 08:00 1240次阅读
    物联网LWIP之socket编程