当前位置: 首页 > 编程日记 > 正文

大小端存储模式的理解和判断

在计算机系统中,存储是以字节为单位的,每个地址单元都对应着一个字节,一个字节=8bit。在C语言中除了8bitchar之外,还有16bitshort型,32bitlong型(要看具体的编译器)。对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,如何安排多个字节的存储,这就有了大端存储模式和小端存储模式。

小端:较高的有效字节存放在较高的的存储器地址,较低的有效字节存放在较低的存储器地址。 大端:较高的有效字节存放在较低的存储器地址,较低的有效字节存放在较高的存储器地址。 如果将一个16位的整数0x1234存放到一个短整型变量(short)中。这个短整型变量在内存中的存储在大小端模式由下表所示。

地址偏移

大端模式

小端模式

0x00

12OP0

34OP1

0x01

34OP1

12OP0

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

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

常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARMDSP都为小端模式。

什么时候要进行大小端字节序的转换?  

short 或者 long的数据在进行通信的时候最好养成:  1、发送的时候使用:htonsl 2、接受的时候使用:ntohsl 而不要理会两边的通信是否需要这么做~~  当然了一般我都不用int型的数据通信,从来都是字符串通信,发送方利用sprintf组织,接收方利用atoi进行转换~~

C语言判断大小端模式

方法一:

void IsBigEndian()
{short int a = 0x1122;//十六进制,一个数值占4位char b =  *(char *)&a;  //通过将short(2字节)强制类型转换成char单字节,b指向a的起始字节(低字节)if( b == 0x11)//低字节存的是数据的高字节数据
 {//是大端模式
 }else{//是小端模式
 }
}

方法二:

void IsBigEndian()//原理:联合体union的存放顺序是所有成员都从低地址开始存放,而且所有成员共享存储空间
{union temp{short int a;char b;}temp;temp.a = 0x1234;if( temp.b == 0x12 )//低字节存的是数据的高字节数据
 {//是大端模式
 }else{//是小端模式
 }
}

转载于:https://www.cnblogs.com/clumsy1006/p/5322348.html

相关文章:

汇编语言学习随笔

1.可执行文件中包含两部分内容: *程序(从源程序中的汇编指令翻译过来的机器码)和数据(源程序中定义的数据) *相关的描述信息(比如程序有多大,占多少内存空间啊等等) 2.segment和ends…

新装Ubuntu18.04系统配置PX4环境

1.安装QGC地面站系统:链接:https://docs.qgroundcontrol.com/master/en/getting_started/download_and_install.html 2.配置系统文件:下载PX4代码 -->打开代码 -->找到文件夹Tools文件 -->找到setup文件夹 -->找到ubuntu.sh文件&…

Blender程序性纹理学习教程大师班 Creative Shrimp – Procedural Texturing Blender Master Class

标题:创意虾-程序纹理Blender大师班 信息: 什么是程序纹理? 程序纹理将简单的数学转换为无限的真实感着色器,具有无限的多样性和分辨率。 超越看起来像一团像素特写的图像纹理,运用程序纹理的力量,清晰的细节和没有重复的模式。 你…

java 全局变量 内存不回收_Java的内存 - 内存回收

这篇承接上一篇 《Java的内存 - 内存模型》,分析内存回收相关的知识点。 垃圾回收包含两个步骤,①标记哪些内存是垃圾 ②回收内存。下面分别说这两个步骤有哪些算法:1. 垃圾标记1.1 引用计数算法没有哪一种 JVM 是使用「引用计数」作为垃圾回…

题目1000:计算a+b

题目描述&#xff1a;求整数a&#xff0c;b的和。 输入&#xff1a;测试案例有多行&#xff0c;每行为a&#xff0c;b的值。 输出&#xff1a;输出多行&#xff0c;对应ab的结果。 样例输入&#xff1a;1 2 4 5 6 9 样例输出&#xff1a;3 9 15 #include<iostream> using…

Mac下chrome的webapp hostadmin 快速切换host

首先是安装 app &#xff0c;https://chrome.google.com/webstore/detail/hostadmin-app/mfoaclfeiefiehgaojbmncmefhdnikeg Chrome把扩展的NPAPI 禁用了&#xff0c;所以做成APP没以前方便了&#xff0c;但是有总比没有好。 安装之后发现mac下选择host文件没法选&#xff0c;因…

PX4如何开启本地在环仿真?如何将仿真地点定位为本地位置?你进来就对了!

视频预览&#xff1a;3架无人机在环仿真 3架仿真jmavsim本地坐标启动教程 1.首先执行仿真命令 n414414:~/001/Firmware$ make px4_sitl_default jmavsim出现左边界面就说明该仿真是可以进行仿真的&#xff01;由于我在自己写的代码里面启动&#xff0c;所以出现右边提示&…

Blender从头到尾创建低多边形角色学习教程 Low Poly Characters – Blender Bitesize Course

从头到尾创建低多边形角色。 你会学到: Blender界面的基础。 基本建模技术。 如何遵循字符引用&#xff1f; 如何创造和塑造自己的角色(不同风格、发型和服装)。 纹理字符。 索具和动画介绍(用于你的游戏引擎或动画)。 调整您下载的资产包角色&#xff0c;以创建新的不同角色。…

20145101《Java程序设计》第4周学习总结

20145101《Java程序设计》第4周学习总结 教材学习内容总结 第六章 继承与多态 继承&#xff1a;避免多个类间重复定义共同行为。把相同代码提升为父类 运用extends关键字的子类会继承扩充父类行为 多个类中存在相同属性和行为时&#xff0c;将这些内容抽取到单独一个类中&#…

反编译使用yield关键字的方法

我认为这是一个真命题&#xff1a;“没有用.NET Reflector反编译并阅读过代码的程序员不是专业的.NET程序员”。.NET Reflector强大的地方就在于可以把IL代码反编译成可读性颇高的高级语言代码&#xff0c;并且能够支持相当多的“模式”&#xff0c;根据这些模式它可以在一定程…

Android studio 启动自学模式

今天在网上看到了编译Android的软件Android studio&#xff0c;出于对Android的学习兴趣&#xff0c;我打算开始新一轮的Android的学习。今天就是在网上&#xff0c;以及图书馆里查找了有关Android studio的书籍&#xff0c;但是由于Android是在13年才开始发布的原因吧&#x…

AutoCAD 2D与3D大师班学习教程 AutoCAD 2D and 3D Masterclass

用实例和解决问题的方法完成从基础到专业的AutoCAD课程。 你会学到什么 AutoCAD课程包含创建计划和模型的命令和不同方法的详细使用。 本课程包括对AutoCAD中使用的所有命令和工具的详细解释。 课程内容是按时间顺序设计的&#xff0c;以了解承担项目的实际方法。 本课程包含两…

威纶通宏开机后使用初始化宏指令_【操作系统】我们按下电脑开机键的背后发生了什么?...

作者&#xff1a;CVNot链接&#xff1a;https://juejin.im/post/5e8844996fb9a03c6675b9d6操作系统是什么&#xff1f;操作系统是用来管理计算机硬件的软件&#xff0c;狭义上实现该定义的为操作系统内核&#xff1b;而更加宽泛的操作系统概念为根据内核对外提供了一些OS服务&a…

Linux常用压缩与解压缩命令

.tar 解包&#xff1a;tar xvf FileName.tar打包&#xff1a;tar cvf FileName.tar DirName&#xff08;注&#xff1a;tar是打包&#xff0c;不是压缩&#xff01;&#xff09;———————————————.gz解压1&#xff1a;gunzip FileName.gz解压2&#xff1a;gzip -d…

【Kubernetes】如何使用Kubeadm部署K8S集群

一 . 准备机器 本次环境采用华为云ECS弹性云服务器部署&#xff08;也可以使用VMware&#xff09; vm01&#xff08;2V4G&#xff09;&#xff1a; Ubuntu_18.04作为K8S master节点 vm02&#xff08;1V1G&#xff09;&#xff1a; Ubuntu_18.04作为K8S node节点 备注: 以下所有…

解决ORA-28000: the account is locked

在oracle中&#xff0c;连续十次尝试登陆不成功&#xff0c;那么此账户将会被锁定&#xff08;lock&#xff09;。当使用被锁定的账户登录时&#xff0c;系统会报错&#xff1a;ORA-28000: the account is locked。查询FAILED_LOGIN_ATTEMPTS参数默认值&#xff0c;这个参数限制…

Android sudio Day01-1

今天我开始学习Android studio的第二天&#xff0c;主题是Android studio的安装。 之前的学校学习都是使用Android开发者工具&#xff08;Android development tools&#xff0c;ADT&#xff09;&#xff0c;而ADT作为一个Android开发工具&#xff0c;它是通过内置于Eclipse的…

学习用C#在Unity中创建一个2D Metroidvania游戏

学习用C#在Unity中创建一个2D Metroidvania游戏 你会学到: 构建2D Unity游戏 用C#编程 玩家统计&#xff0c;水平提升&#xff0c;米尔和远程攻击 敌方人工智能系统 制定级别和级别选择 Learn To Create A 2D Metroidvania Game in Unity With C# MP4 |视频:h264&#xff0c;…

3.27课·········悬浮动态分层导航与隐藏导航

例1:分层导航 <title>分层导航</title> <script src"../JavaScript/jquery-1.4.2.min.js">//引用外部JS代码 </script> <style> #apDiv1 {position: fixed;left: auto;top: auto;bottom: auto;width: 237px;height: auto;z-index: 2;m…

.sh是什么语言_shell的重生历史:从sh到bash

shell 门派之争Linux 中的 shell 有很多类型&#xff0c;其中最常用的几种是&#xff1a;Bourne shell (sh)、C shell (csh) 和 Korn shell (ksh)&#xff0c;它们各有优缺点&#xff0c;用户则萝卜青菜&#xff0c;各有所爱。Bourne shell 出师不利Bash&#xff1a;Bourne aga…

【Docker】容器的几种网络模式

当你使用Docker时&#xff0c;你会发现需要了解很多关于网络的知识。Docker作为目前最火的轻量级容器引擎&#xff0c;因此&#xff0c;我们有必要深入了解Docker的网络知识&#xff0c;以满足更高的网络需求。本文介绍了Docker的4种网络模式。 1、首先我们先简单描述一下容器…

微信推送模板消息的PHP代码整理

本文为本人原创&#xff0c;未经许可&#xff0c;不可转载。 博主长期从事微信开发&#xff0c;微信开发相关问题和业务请联系qq 2580234897 最近做过一个需要推送消息的系统&#xff0c;就研究了一下微信的模板消息的推送。由于认证过的微信号&#xff0c;就用测试号做的&…

Android studio Day01-23

AndroidDay01-2&#xff08;Android studio安装&#xff09; 步骤如下&#xff1a; &#xff08;1&#xff09;下载Android studio下载地址&#xff1a;www.developer.android.com./sdk/installing/studio.html &#xff08;2&#xff09;双击安装&#xff0c;建议在studio安…

Unity 3D学习视觉脚本无需编码即可创建高级游戏

在本课程中&#xff0c;您将学习如何在Unity中使用可视化脚本(以前称为Bolt)以及如何在不编写一行代码的情况下创建自己的高级游戏所需的一切。本课程将教你如何掌握可视化脚本&#xff0c;即使你以前没有任何关于unity或编程的经验。 课程获取&#xff1a;Unity 3D学习视觉脚…

树莓派siri homekit_利用树莓派Zero自制一款Homekit摄像头,看上去挺酷,手痒了吗?...

虽然最近相继有多款兼容homekit商用摄像头上市&#xff0c;如果您也和小编一样&#xff0c;喜欢动手&#xff0c;那么DIY一款Homekit摄像头&#xff0c;然后自己3D打印个外壳支架&#xff0c;是不是很酷&#xff1f;HKCam项目Home 4开发者Matthias提供了一个开源项目&#xff0…

如何释放电脑被限制的20%网速?

很多朋友不管是看电影还是玩游戏&#xff0c;总觉得自己的网速慢&#xff0c;这跟自己所办网络的带宽有一定关系&#xff0c;但我们也要知道&#xff0c;我们的电脑在买来时&#xff0c;默认是限制了20%网速的&#xff0c;如何释放这20%的网速&#xff0c;提高用户体验呢&#…

【Docker】registry部署docker私有镜像仓库

Docker Hub作为Docker默认官方公共镜像仓库&#xff0c;但是如果我们不想使用怎么办&#xff0c;第一我们可以替换默认镜像仓库为我们国内的一些镜像仓库&#xff0c;第二就是如我们自己搭建一个自己的私有镜像仓库&#xff0c;官方也提供docker registry镜像&#xff0c;使得搭…

JAVA 面向对象

1&#xff1b;什么叫面向对象&#xff1a;1&#xff1b;面向对象和面向过程是一种思想2&#xff1b;面向过程&#xff1a;强调的是功能行为3&#xff1b;面向对象&#xff1a;将功能进行封装&#xff0c;强调具备了功能的对象2&#xff1b;面向对象的特征&#xff1a;1&#xf…

Android studio Day02-1

AndroidDay02-1&#xff08;project&#xff09; 新建一个project&#xff0c;并选择一个自己project的存贮的位置 Android studio 2.3.1默认的最小的API为15 第一次使用并建立自己的project&#xff0c;软件进行相应的sdk其他的组建的安装 点击next进入下一个界面&#xff0c…

Unity Pro builder创建模块化仓库建筑学习教程

Unity内部的专业3D编辑工作室 你会学到: 直接在Unity内部学习3D建模 使用专业构建器的专业方法 为您的游戏创建模块化资产 了解如何为您的三维模型设置纹理 三维资产的模块化布局 专业后期制作和轻烤 Unity Pro Builder Warehouse MP4 |视频:h264&#xff0c;1280720 |音频:AA…