大端字节序和小端字节序
title: 大端字节序和小端字节序
来源
《格列佛游记》中记载了两个征战的强国,你不会想到的是,他们打仗竟然和剥鸡蛋的姿势有关。
很多人认为,剥鸡蛋时应该打破鸡蛋较大的一端,这群人被称作“大端(Big endian)派”。可是当今皇帝的祖父小时候吃鸡蛋的时候碰巧将一个手指弄破了。所以,他的父亲(当时的皇帝)就下令剥鸡蛋必须打破鸡蛋较小的一端,违令者重罚,由此产生了“小端(Little endian)派”。这就是大端,小端的来源。
什么是大端和小端
计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)。
大端法
最高有效字节在最前面的方式称为大端法,例如假设变量x类型为int型,位于地址0x100的地方,其16进制值为0x12345678,地址范围为0x100到0x103字节。
对于大端法的机器来说:
0x100 | 0x101 | 0x102 | 0x103 |
---|---|---|---|
12 | 34 | 56 | 78 |
由上图可见,地址从左向右增长,x的最高有效字节12在最前面存储。这正好和我们平时书写习惯一致,先书写最高有效字节,再依次写其余字节。
小端法
最低有效字节在最前面的方式成为小端法,这正好和大端法相反,仍然用大端法中举的例子说明:
0x100 | 0x101 | 0x102 | 0x103 |
---|---|---|---|
78 | 56 | 34 | 12 |
- 大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。
- 小端字节序:低位字节在前,高位字节在后,即以0x1122形式储存。
为什么有大端小端
可能很多人不理解,为什么要有大端和小端之分。
- 首先为什么会有大端,因为大端符合我们人类的阅读习惯,比如说我们习惯的从123456开始阅读,而不是654321.
- 既然人类的阅读习惯就是从大端开始,为什么还要有小端呢?因为计算器的电路会优先处理低位字节,采用小端效率比较高,因为计算都是从低位开始的。所以,计算机的内部处理都是小端字节序。
只有读取的时候,才必须区分字节序,其他情况都不用考虑