大端存储:即高字节存储在低地址处,即高位先存,大端也叫“高尾端”
小段存储:即低字节存储在高地址处,即低位先存,小端也叫“低尾端”
大端存储:例如0x11223344,则44就是尾端,存储地址假如从0~4,则当存储这个数据时,将依次从低地址0向高地址4存储,且按照11~44的顺序存储就叫大端存储。
小段存储:例如0x11223344,则44就是尾端,存储地址假如从0~4,则当存储这个数据时,将依次从低地址0向高地址4存储,且按照44~11的顺序存储就叫小端存储。
接下来我们介绍两种判断大小端的方法
void Judge_port()
{
int a = 1;
char char*p = (charchar*) &a;
if(*p == 1)
printf("小端\n");
else
printf("大端\n");
}
上面这个程序解决这个问题的思想是怎么样的呢?
其实很简单,我们将a的地址强制转换成char型的,假设a=1在内存中的存储是以00 00 00 01的形式存放的,然后我们解引用这个指针,就可以看到00 00 00 01的第一个字节,如果是0,那么就是大端存储,如果得到的是1,那么就是小端存储。
第二种方法是利用联合体来解决这个问题
#include<stdio.h>
#include<stdlib.h>
void Judge_port()
{
union t
{
int i;
char c;
}t1;
t1.i = 1;
if(t1.c = 1)
printf("小端\n");
else
printf("大端\n");
}
int main()
{
Judge_port();
return 0;
}
要想理解联合的这种做法,首先我们来介绍一下联合的概念
联合:联合体的各个成员公用内存,并同时只有一个成员得到这块内存的使用权(即对内存的读写),而结构体的成员拥有各自的内存,各自互不干扰