嵌入式通信数据经常说的大端和小端模式(学习)

一.概念

大端模式(Big-endian):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端,即正序排列,高尾端;

小端模式(Little-endian):低位字节排放在内存的低地址端,高位字节排放在内存的高地址端,即逆序排列,低尾端;

例(无论是小端模式还是大端模式。每个字节内部都是按顺序排列):

1)大端模式:

低地址 -----------------> 高地址

0x0A  |  0x0B  |  0x0C  |  0x0D

2)小端模式:

低地址 ------------------> 高地址

0x0D  |  0x0C  |  0x0B  |  0x0A

3)下面是两个具体例子:

16bit宽的数0x1234在两种模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址    小端模式存放内容    大端模式存放内容
0x4000    0x34    0x12
0x4001    0x12    0x34
32bit宽的数0x12345678在两种模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:

内存地址    小端模式存放内容    大端模式存放内容
0x4000    0x78    0x12
0x4001    0x56    0x34
0x4002    0x34    0x56
0x4003    0x12    0x78
4)大端小端没有谁优谁劣,各自优势便是对方劣势:

小端模式 :强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。
大端模式 :符号位的判定固定为第一个字节,容易判断正负。

二、数组在大端小端模式下的存储:
以unsigned int num = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf[4]来表示num:
Big-Endian: 低地址存放高位,如下:

低地址

---------------

buf[0] (0x12) -- 高位 

buf[1] (0x34)

buf[2] (0x56)

buf[3] (0x78) -- 低位

---------------
高地址
 
Little-Endian: 低地址存放低位,如下:

低地址

---------------

buf[0] (0x78) -- 低位

buf[1] (0x56)

buf[2] (0x34)

buf[3] (0x12) -- 高位

--------------

高地址

三、为什么会有大小端模式之分呢?
       这是因为在计算机中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8 bit。但是在C 语言中除了 8 bit 的char之外,还有 16 bit 的 short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着如果将多个字节安排的问题。大端存储模式和小端存储模式也就应运而生。例如一个16bit的short型 x ,在内存中的地址为 0x0010,x 的值为0x1122,那么0x11位高字节,0x22位低字节。对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/723594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据开发(Hadoop面试真题-卷六)

大数据开发(Hadoop面试真题) 1、MapReduce为什么一定要有环型缓冲区?2、MapReduce为什么一定要有Shuffle过程?3、Reduce怎么知道去哪里拉Map结果集?4、MapReduce Shuffle的排序算法?5、MapReduce shuffle为…

基于springboot的场地预约小程序的设计与实现(程序+数据库+文档)

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 目录 一、研…

《操作系统真相还原》读书笔记二:环境搭建 xshell连接virtualbox

修改 sshd_config 使用 vi /etc/ssh/sshd_config命令进入sshd服务配置,键盘输入i进行编辑,将监听端口、监听地址前的 # 号去除,开启允许远程登录,开启使用用户名密码来作为连接验证。修改完成,按一下Esc,输…

网络原理初识(1)

目录 一、网络发展史 1、独立模式 2、网络互联 3、局域网LAN 局域网组建的方式 1、基于网线直连 2、基于集线器组建 3、基于交换机组建 4、基于交换机和路由器组建 4、广域网WAN 二、网络通信基础 1、IP地址 2、端口号 3、认识协议 4、五元组 一、网络发展史 1、独立模式 …

Linux环境下多个python版本的使用方法

1、查看python 解释器的安装位置 which python3 which python22、使用pip命令查看安装包 在确认Pyhton解释器的安装位置之后,我们可以使用pip命令来查看安装的包。pip是Python的包管理工具,可以用于安装、升级、卸载Python包。 pip list pip3 list pi…

Jmeter事务控制器聚合报告

Jmeter 事务控制器。 在Jmeter中,默认一个取样器就是一个事务事务控制器控制其子集取样器,合并为一个事务 添加:逻辑控制器/Logic Controller -> 事务控制器/Transaction Controller TPS: 服务器每秒处理的事务数在事务控制器下添加多个…

牛客网 华为机试 进制转换

本题是要将十六进制的字符串转换成十进制。看到题目第一眼就想到用map进行十六进制和十进制的映射。 然后我们需要注意,字符串前面会有0X,这只是一个标识十六进制的标识符,没有具体数字意义,我们在转换的时候,需要把它…

【视频转码】基于RK3588的视频转码探索

传统的视频转码服务基本都是基于X86下CPU、GPU转码,对硬件性能、功耗、成本来说都比较高。从技术角度来说现有视频转码技术有: 视频编码转变: 1. H.264 > H.265 保持视频分辨率、清晰度不变情况下,更改视频压缩方式&#xff0…

2024Java面试题知识点总结,一名毕业三年的女程序媛面试头条经验

程序员:给多少工资,干多少事 我们不是经常会看到一个关于西游记的“悖论”吗: 为什么孙悟空初期大闹天宫的时候那么厉害?因为他自己当老板,打一群天庭的打工仔。 为什么取经路上又变得不行了?作为一个打工…

牛客网 华为机试 取近似值

本题是要实现四舍五入。我们采用float的数据类型,因为这样数据精度更高。然后我们可以把得到的数据0.5,然后再转换成int数据类型,因为转换成int数据类型的时候是向下取整的,比如4.9转换成int就是4,4.2转换成int也是4。…

【Redis】高级特性 - 有序集合

文章目录 1. 有序集合的基本概念2. 使用场景2.1 排行榜2.2 时间轴2.3 范围查找 3. 基本操作3.1 添加成员3.2 查找成员排名3.3 查找成员分数3.4 范围查找3.5 删除成员 4. 示例演练4.1 添加成员和分数4.2 查找成员排名和分数4.3 查找排行榜4.4 删除成员 5. 有序集合的应用之美 在…

微服务笔记

什么是微服务? 微服务是一种经过良好架构设计的分布式架构方案,微服务架构特征: 1.单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业发。 2.面向服务:微服务对外暴露业务接口 3.自治:团…

代码随想录算法训练营第52天| 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

300.最长递增子序列 完成 思路: 本题dp[i]代表[0,i]数组的最长递增子序列,一开始的想法也是两层for循环,但总觉得这题不该这么烦。然后看了随想录的题解,也是两层for循环,所以有了想法就要去尝试。 本题初始化也是个…

react中tab选项卡切换

react中tab选项卡切换,直接上代码,简单易懂 jsx代码 /* eslint-disable react-hooks/exhaustive-deps */ import React, { useEffect, useState } from "react"; import DocumentTitle from react-document-title import styles from ./…

《More Effective C++》- 极精简版 21-30条

本文章属于专栏《业界Cpp进阶建议整理》 继续上一篇《More Effective C》- 极精简版 11-20条。本章我会继续讲解我对21-30条的极精简的理解。 21、利用重载技术避免隐式转换 const A operator(const A& a1, const A& a2) ,且有构造函数 A(int){}那 A a3 2…

ctf_show笔记篇(web入门---文件上传)

文件上传 151:简单的前端验证,有多种绕过方法 152:简单后端验证,不知道过滤了那些后缀,我尝试以后都可以上传 153:利用.user.ini文件,虽然能上传.pht这一类文件但访问时只会下载下来 这里就…

列表吸顶分组之按首字母分组国家选区号

列表粘性分组之按首字母分组国家选区号 Android原生版本 直接先看UI图,效果如下 本来看起来也不难,我就想着上面常用区号那块不动,下面的列表滑动就行,但IOS说他滑动的时候上面也滑上去了,好吧,这也行;但最终效果做出来后,IOS滑动后会有按照国家名称首字母进行粘性分…

低代码:数智化助力新农业发展

随着科技的飞速发展和数字化转型的深入推进,低代码开发平台正逐渐成为软件开发的热门话题。尤其在农业领域,低代码技术为传统农业注入了新的活力,助力新农业实现高效、智能的发展。 低代码开发平台的概念与特点 随着科技的飞速发展&#xff0…

穿越数字防线:SSH协议的全景解析与未来展望

SSH基本概念 SSH(Secure Shell)是一个用于计算机网络的加密协议,设计用来提供一种安全的方式通过不安全的网络进行远程登录和其他网络服务。SSH协议主要用于远程管理系统和安全地传输信息。 SSH的历史背景 SSH由Tatu Ylnen于1995年开发&am…

IT廉连看——Uniapp——应用生命周期

IT廉连看——Uniapp——应用生命周期 [IT廉连看] 目标: 了解APP.vue这个页面 了解所有的应用生命周期 熟练编写常用的应用生命周期 1、App.vue: 在UniApp中,App.vue是应用的根组件。它类似于其他前端框架中的根组件,如Vue…