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 ...
随机推荐
- sonar-project.propertie分析参数
SonarScanner 是当您的构建系统没有特定扫描仪时使用的扫描仪. 配置您的项目 在你的项目根目录中创建一个名为的配置文件 sonar-project.properties # must be ...
- Envoy实现.NET架构的网关(三)代理GRPC
什么是GRPC gRPC是一种与语言无关的高性能远程过程调用 (RPC) 框架.gRPC 的主要好处是: 现代.高性能.轻量级的 RPC 框架. 契约优先的 API 开发,默认使用协议缓冲区,与语言无 ...
- 开发笔记----- python3 小甜点
一.字典内容排序 1.根据 值大小排序,默认reverse=False:从小到大排序,True:从大到小排序.例: >>> dic1 = {'a1':4,'b1':12,'c1':1 ...
- DeWeb发展历程! 从2015年开始
有位朋友问: [高中]长兴(667499XX) 2021-01-15 15:52:11 deweb会长期做吗 我查了一下,发现deweb最早从2015开始,算起来已经做了5~6年了,目前已日臻成熟!
- 二,zabbix与php的一些问题
zabbix 检查先决条件 一.php-bcmath 不支持 php 安装 bcmath 扩展(编译安装) PHP的linux版本需要手动安装BCMath扩展,在PHP的源码包中默认包含BCMath的 ...
- JSON数据和Java对象的相互转换
JSON解析器: 常见的解析器: Jsonlib, Gson, fastjson, jackson 其中应用最广泛的是jackson,阿里的fastjson虽然比jackson快一点,但存在的问题比较 ...
- sklearn模型保存与加载
sklearn模型保存与加载 sklearn模型的保存和加载API 线性回归的模型保存加载案例 保存模型 sklearn模型的保存和加载API from sklearn.externals impor ...
- Python打包成exe可执行文件
Python打包成exe可执行文件 安装pyinstaller pyinstaller打包机制 Pyinstaller打包exe 总结命令 可能会碰到的一些常见问题 我们开发的脚本一般都会用到一些第三 ...
- 【Django】Mac 安装pip3-install-mysqlclient 报错
1.首先在pip3-install-mysqlclient时报错 mysql_config not found 2.逛了一些博客 让安装mysql或者mysql-connector-c 我安装了后者还 ...
- macos command 'clang' failed with exit status 1
export CC=$(which gcc)export CXX=$(which g++)pip install fbprophet CC=clang pip install gevent