端模式
端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian大端,从尖头开始将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)。
大端
低地址存储高字节(起决定性作用的数,例如:1234中的1代表一千起决定性作业),高地址存储低字节。优点:直观。
小端
低地址存储低字节,高地址存储高字节。优点:符合逻辑,利于计算机计算。
大小端的判断
定义一个整型i=1;其在内存中的存储如下
00000000 00000000 00000000 00000001
高字节 低字节
如果是小端模式,那么 00000001将会放在低地址,如果是大端模式 00000001将会放在高地址。char指针一个字节大小,如果是小端模式(char)&i指向的将是 00000001,对(char*)&i解引用将得到1。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i = 1;
int jet = *(char*)&i;
if (jet == 1)
printf("小端");
else
printf("大端");
system("pause");
return 0;
}
监视内存i如下
为了更好的理解,i是如何在内存中存储的,我们把i的值改为300。
300对应的二进制为
00000000 00000000 00000001 00101100
高字节 低字节
内存中的数据是以十六进制存储的 01 对应 二进制中的00000001 ,2c对应二进制中的 00101100,这样就可以很直观的观察小端模式是如何存储整型的了。