ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

大小端(最通俗易懂的文章)

2021-05-21 15:59:17  阅读:112  来源: 互联网

标签:存储 字节 int 储存 通俗易懂 文章 大小 数据


在研究大小端前,我们需要明确几个概念

1)存储单元:具有存储数据和读写数据的功能,以8位二进制作为一个存储单元,也就是一个字节。

2)字节(Byte):是计算机信息技术用于计量存储容量的一种计量单位 。

这里可以看出,我们的储存单元和字节是对等的,同时我么也不难推理出,我们先有了储存单元,为了便于与位数有对应关系,因此我们把一个储存单元储存的数叫做字节。

3)进制:进制也就是进位计数制,是人为定义的带进位的计数方法。它只是一种表示方式,并不影响我们数据的具体意义。
为什么我们常用二进制和十六进制
二进制——位
两位十六进制——字节
这里把这两种表示方式和我们的存储对应上了,又由于我们编程时对存储也是比较在意的,因此我们喜欢用这两个表示。

请记住
1)大端小端只和数据存储有关,这里涉及了分层。
如果你只是应用数据,而不是从内存去读数据和去存储数据,那么你不需要知道大小端。(上层)
如果你需要存储数据,并且传输这些数据,传输之后还要到接收端去提取数据,那么你需要明确大小端(下层)。

2)大小端只是数据在地址中的存储顺序,这个并不涉及存储单元内部,也就是说放存储单元内部的8位数(2位16进制数)和大小端无关。

3)不同变量之间不存在大小端的问题,大小端只发生在一次存储单个变量时的储存顺序选择。

4)我们的书写和表达与大小端无关,有些文章可能会写出来大小端后我们的数据成了什么形式,但是这样做完全会给读者造成假象:我读取的数据就这样了?顺序变了?我咋办,我咋用之类的。那些都是下层的事情,下层要确保我储存数据前和读出数据使用时都是正常顺序。

何为正常顺序?
例如我们要存储int a = 0x886699;储存后,传给别人,别人在使用这个数据时,也是0x886699,这便是正常顺序。至于下层是把0x99放低位,还是把0x88放低位,上层都不需要管。

5)大小端存储和读取时,我们必须知道数据大小,也就是为什么我们在使用一个数据或者定义一个参数时,必须定义它的数据类型(占用了几个储存单元/几个字节)。
存储时:
1)先按照数据类型开辟一个空间。int a;4字节|——|——|——|——|
2)数据定义。a=0x123456;
3)数据分割成存储单元(字节)。0x12——0x34——0x56
4)不用考虑谁先放谁后放,我们要按顺序放,先放0x12,再放0x34……
5)大端存储方式,先往低地址放,|0x12|0x34|0x56|——|
小段存储方式,先往高地址放,|——|0x56|0x34|0x12|

这里也非常明显看出大小端的定义,大端左边都是有数据的,右边可能为空。
小端,右边都是有数据的,左边可能为空。

读取时:
1)大端依次读出,小端倒叙读出。读取时,字节内部是一个整体不受倒叙影响。
2)读取后,就和之前未存储时顺序一致了,也就是数没发生变化。

6)要注意是int转hex还是char转hex
如果是int转hex,直接转。往回转时,也是直接转。
如果是字符转hex,那么中间需要考虑ascii码对应,往回转时,也需要考虑ascii码对应。

又因为char只占有一个字节,因此字符不需要考虑大小端,当有字符串时,需要考虑大小端。确保读出来的和存储时一致。

例如

1.数值表示
int a = 520;
int b = 0x0208;
此时a=b。
——————————
2.b的大端储存方式
——
|
——
|
——
0x08
——
0x02
——
或者
——
|
——
|
——
00001000
——
00000010
——
——————————
3.b的小端储存方式
——
0x02
——
0x08
——
|
——
|
——
或者
——
00000010
——
00001000
——
|
——
|
——

标签:存储,字节,int,储存,通俗易懂,文章,大小,数据
来源: https://blog.csdn.net/a6333230/article/details/117117919

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有