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 ...
随机推荐
- matplotlib散点图
我们常用的统计图如下: 1.学会绘制散点图 一个小demo: 假设通过爬虫你获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间(天)变化的某种规 ...
- 攻防世界 杂项 7.Aesop_secret
打开发现是个gif,以为有个二维码扫一下就给flag,结果被欺骗.呜呜呜 好了,还是使用编辑器看一下吧 发现了好玩的,U2FsdGVkX19QwGkcgD0fTjZxgijRzQOGbCWALh4sR ...
- 理解ASP.NET Core - 文件服务器(File Server)
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 提供静态文件 静态文件默认存放在 Web根目录(Web Root) 中,路径为 项目根目录(C ...
- CentOS7自动备份oracle数据库
1.环境 操作系统:CentOS 7 数据库:11.2.0.1.0 2.登录服务器 切换oracle用户,备份需要在oracle用户下进行 #su - oracle 在oracle家目录下创建bin目 ...
- 区块链开发学习第三章:私有链上部署helloBlockchain简单合约
前面讲了部署私有链以及新增账户,现在进行到了部署合约了,此操作真是踩了无数无数无数的坑,到写文章为止确实是已经部署好了,但是还有些坑是还没有解决的! 一.Solidity编译器 开始的时候用的http ...
- ELK集群之grafana(8)
Grafana的安装和读取ES数据 模拟es数据产生sjgtest.py import time import datetime from elasticsearch import Elasticse ...
- mongodb入门命令-创建表数据(二)
1.mongodb入门命令 1.1 show databases; 或 show dbs; //查看当前的数据库 > show dbs; admin 0.000GB config 0.000GB ...
- 开源项目|Go 开发的一款分布式唯一 ID 生成系统
原文连接: 开源项目|Go 开发的一款分布式唯一 ID 生成系统 今天跟大家介绍一个开源项目:id-maker,主要功能是用来在分布式环境下生成唯一 ID.上周停更了一周,也是用来开发和测试这个项目的 ...
- springboot使用之请求参数与基本注解
@PathVariable 作用:@PathVariable是spring3.0的一个新功能:接收请求路径中占位符的值,将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariabl ...
- PTA甲级1094 The Largest Generation (25分)
PTA甲级1094 The Largest Generation (25分) A family hierarchy is usually presented by a pedigree tree wh ...