![2106fced504aeeb361ec200e82d0d29a.png](https://i-blog.csdnimg.cn/blog_migrate/16ab893f7b75766e9f507663fcdfa63e.jpeg)
01
引言
在计算机内存中,通常是以字节(Byte),也就是 8 个位(Bit)为基本存储单元(也有以 16 位为基本存储单元的)。对于跨越多个字节的数据类型(比如 int 长 4 个字节),如何在内存中对这些字节进行排序有两种常见的方法:大端法(Big-endian)和小端法(Little-endian)
![c6575f16d0ede9e76d8151e7a9c62d6d.png](https://i-blog.csdnimg.cn/blog_migrate/e55ed20c33255b44c227888681940d5d.jpeg)
【注】首先不管是大端法还是小端法存储,计算机在内存中存放数据的顺序都是从低地址到高地址,所不同的是首先取低字节的数据存放在低地址还是取高字节数据存放在低地址。
比如说:0x12345 为了方便理解从左到右,字节从高到底
在内存里面是这样存储的:低位存在低地址,所以是小端存储
![f610256a3b5842d1df8454ef0b2e75d2.png](https://i-blog.csdnimg.cn/blog_migrate/dc3d3ded8cc2cd49cdf535809c147f9c.png)
02
基本概念
高位放在低地址就是大端法
低位放在低地址就是小端法
例如0x0A0B0C0D的在大端和小端中的存放方式分别为:
![48109e0dcebe806a860e759d671e1d9c.png](https://i-blog.csdnimg.cn/blog_migrate/38722f81c369a56275d673d483985429.jpeg)
![585f8075bbe9a8b00ea227f06633353b.png](https://i-blog.csdnimg.cn/blog_migrate/37eb8220c7bf4ab8a135120beebb9de6.png)
程序验证
利用C里的联合类型
#include<stdio.h>
03
注意
字节序还是位序
大端法和小端法指的是字节在内存中存储时的排列规则,而不是数据中的位的排列规则。也有以位序排列的机器,但很少见。另外,再次明确一下,大端法或小端法是数据在存储时的表现,而不是在寄存器中参与运算时的表现。
浮点数的字节序
在所有机器上,浮点数在存储时的字节顺序是和整数的字节顺序一样的,所以在进行网络传输时,可以把浮点数当作整数进行字节序转换。但在历史上,曾经有段时间因为 IEEE 并没有规定浮点数在网络上传送的标准,所以浮点数都是以大端法进行存储的。
04
结语
大多数Inter兼容机只用小端法,Android和IOS也只用小端法;IBM和Oracle的大多数机器用大端法,但它们的制造的个人电脑使用的是Inter兼容的处理器,因此使用小端法。
令人吃惊的是,对于哪种字节顺序更合适这个问题,人们表现的非常情绪化,从它的名字来源就可看出
【“端”的起源】
术语“little endian(小端)”和“big endian(大端)”出自Jonathan Swift的《格列佛游记》一书,其中两个派别交战的原因仅仅因为一方认为要从较大的一端敲开鸡蛋,而另一方认为要从小的一端敲开鸡蛋。
在作者的那个年代,Swift是借此讽刺英国和法国之间的持续冲突(难道命名者也是借此讽刺大端法和小端法的矛盾,,,只是臆想,蒟蒻什么也没说)
其实做为一个学习者,有一个学习的氛围跟一个交流圈子特别重要这里我推荐一个C/C++基础交流583650410,不管你是小白还是转行人士欢迎入驻,大家一起交流成长。
![9d478dbc8860356446f27bcb38deb30b.png](https://i-blog.csdnimg.cn/blog_migrate/0ad9ec5597c9d766a4dc9b9502469595.jpeg)
![3ebd59e823e73fda0c873d140ba2e08e.png](https://i-blog.csdnimg.cn/blog_migrate/13e3c6c2f25a4208a95dc4280cdd800a.jpeg)