C语言中储存的大小端问题
一、大小端定义
研究变量的高低字节:从左往右看,字节序递增,也就是最右边是最低字节,最右边是最高字节。如 int i = 0x01020304, 01是高字节,04是低字节。如果是字符串如char a[10] ="hello",h位低字节,o为高字节,这个和整型变量是相反的。
内存中的高低地址:内存地址值大的是高地址,相反小的是地地址。如,0x4000(低地址) 0x4001(高地址) .
小端存储:低字节存储在低地址处
大端存储:高字节存储在高字节处
1,小端模式:内存的低地址存数据的低位,内存的高地址存数据的高位。低低高高。
2,大端模式:内存的低位存数据的高位,内存的高地址存数据的低位。 低高高低。

int i = 0x1234567的存储形式见上图。
注意:大小端存储问题,只有变量的类型字节数大于1才有意义,因为区分大小端的时候我们是对一个数进行整体分析的。下面的例子很好的说明这点:
何为数据的小端存储?何为数据的大端存储?仅从定义上说,小端存储指的是低字节存储在低地址处,高字节存储在高字节处;大端存储,则刚好相反。定义如此简单,其实质也非常简单。假如我这样问你,int A[100]在存储器中大端存储方式是如何存的呢?不知道,你会怎么回答,反正我刚开始是认为A[99]存储在地址最低的地方,A[0]存储在最高的地址的地方。如果你跟我认为的一样,那你就大错特错了。
实际的原因还是对概念定义的对象定位不明。实际上大端存储也好,小端存储也罢,它们指的是某个多字节类型的数据比如int i=1;在内存中的存储情况。内存的编址是以字节为最小单位进行的,也就是每一个字节都有地址;但变量i,由于有四个字节,这四个字节又是以一个整体的形式出现的,所以把四个字节中的首字节地址作为变量i的地址。大端存储、小端存储指的就是四个字节的i=1在这四个字节中是怎么安排的。
用16进制来表示i,则i=0x00 00 00 01;在小端存储中01被安排在i四个字节的首字节也就是地址最小的地方;子大端存储中,01被安排在四个字节中地址最高的地方。但不管大端还是小端存储,int i都是以整体的形式出现的。这样就可以理解,不管是大端还是小端存储,A[100]都应该是A[0]地址最小,A[99]地址最大。
C语言中储存的大小端问题的更多相关文章
- C语言中储存类别和内存管理
C语言中储存类别和内存管理 储存类别 C语言提供了多种储存类别供我们使用,并且对应的有对应的内存管理策略,在了解C中的储存类型前,我们先了解一下与储存类型相关的一些概念. 1. 基础概念 对象:不同于 ...
- C语言共用体、大小端、枚举
1.共用体和结构体的相同和不同 (1)相同点就是操作语法几乎相同.(2)不同点是本质上的不同.struct是多个独立元素(内存空间)打包在一起:union是一个元素(内存空间)的多种不同解析方式. # ...
- c语言:union,大小端
union: 不允许只用联合变量名作赋值或其它操作. 也不允许对联合变量作初始化赋值,赋值只能在程序中进行. 小端存储: 以字节为单位,低存低,高存高. 任何数据在内存中都是以二进制(1或着0)顺序存 ...
- C语言编写程序的大小端问题
有时候,用C语言写程序需要知道大端模式还是小端模式,,由于寄存器大于一个字节(8bit),就会存在一个字节安排的问题,例如(16bit)的short型,(32bit)的int型,具体需要看具体的编译器 ...
- 大小端 Big-Endian 与 Little-Endian
应该说没做底层开发(硬件或驱动)的人很可能不会彻底理解大小端的概念,大小端不是简单的一句“大端在前”还是“小端在前”能够概括的问题.在cpu, 内存, 操作系统, 编译选项, 文件,网络传输中均有大小 ...
- C语言中的位域、字节序、比特序、大小端
转:http://www.360doc.com/content/13/0624/10/496343_295125641.shtml 1.比特序 / 位序 / bit numbering / bit ...
- 计算机中的大小端模式及C语言中如何鉴别他们
我的博客:www.while0.com 参考http://blog.csdn.net/ce123_zhouwei/article/details/6971544 写的很详细. 大小端主要是对数字类型来 ...
- C语言随笔3:指针定义、数据在地址中的大小端排列
指针变量:用于存放另一个变量的地址 (指针变量所占空间大小由操作系统决定32/64位 4/8字节 // 声明且定义:int *p=&a: 声明.定义:int *p: p= &a: ...
- 关于C51中“大小端存储”问题的详解
1. Little-Endian(小端存储),即将低字节的数据存储于低地址中,Big-Endian(大端存储)反之. 2. 小端存储称为Intel模式,大端存储称为Motorola模式. 3. C51 ...
随机推荐
- 洛谷 P2680 [NOIP2015 提高组] 运输计划
链接:P2680 题意: 在树上把一条边边权变为0使得最长给定路径最短 分析: 最大值最小可以想到二分答案,对于每一个mid,寻找所有大于mid的路径,再寻找是否存在一条边使得删去它后大于mid的路径 ...
- 自定义容器tomcat应用
看不懂可以先去看:https://www.cnblogs.com/leihongnu/p/14506704.html 1.将103服务器上的mytomcat镜像打包为mytomcat.gz(花时间比较 ...
- [mysql课程作业]我的大学|作业
第八周周五 1.将xs表中王元的专业改为"智能建筑". # update xs set 专业名='智能建筑' where 姓名='王元'; # select * from xs w ...
- AliRTC 开启视频互动 “零计算” 时代
在 2021 云栖大会<产业视频化创新与最佳实践>视频云主题论坛中,阿里云智能高级技术专家在<AliRTC 开启视频互动 "零处理" 时代>的主题演讲中,发 ...
- 攻防世界 WEB 高手进阶区 XCTF 4th-CyberEarth ics-06 Writeup
攻防世界 WEB 高手进阶区 XCTF 4th-CyberEarth ics-06 Writeup 题目介绍 题目考点 掌握暴力破解手段 Writeup 打开链接 http://220.249.52. ...
- 理解ASP.NET Core - 日志(Logging)
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 快速上手 添加日志提供程序 在文章主机(Host)中,讲到Host.CreateDefault ...
- Vue 之 Mixins (混入)的使用
是什么 混入 (mixins): 是一种分发 Vue 组件中可复用功能的非常灵活的方式.混入对象可以包含任意组件选项.当组件使用混入对象时,所有混入对象的选项将被合并到组件本身,也就是说父组件调用混入 ...
- [Vue warn]: Unknown custom element: <sapn> - did you register the component correctly? For recursive components, make sure to provide the "name" option. found in ---> <Evaluate> at src/views/index/
关于vue报错: [Vue warn]: Unknown custom element: <sapn> - did you register the component correctly ...
- MongoDB与MySQL效率对比
本文主要通过批量与非批量对比操作的方式介绍MongoDB的bulkWrite()方法的使用.顺带与关系型数据库MySQL进行对比,比较这两种不同类型数据库的效率.如果只是想学习bulkWrite()的 ...
- 使用Adobe Acrobat进行Word转PDF遇到的问题及解决方法
软件版本:Adobe Acrobat 9 Pro 使用场景:Word转PDF 问题1: 我以为先要在Adobe Acrobat 9 Pro中打开Word文件,然后在执行类似转换/导出操作.但是始终无法 ...