将一个int类型的数据放入四个字节里,具体是怎么放的?
如图 :有两种存放方式,这两种存放方式都是存在的。不同的设备,采用的存放方式可能不同。
像存储方式1,将数据的低位字节放在低地址内存单元,数据的高位字节放在高地址内存单元,叫做小端字节序存储。
像存储方式2,将数据的低位字节放在高地址内存单元,而将数据的高位字节放在低地址内存单元,叫做大端字节序存储。
可以通过下面一段代码知道我们现在正使用的设备采用大端还是小端。
#include <stdio.h>
char TestSizeEnd()
{
union un
{
char ch;
int i;
}n1;
n1.i = 1;
return n1.ch;
}
int main()
{
if (TestSizeEnd())
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
首先,我们知道共用体的特点是所有成员共用同一块空间,只能同时只有一个成员在使用这块空间。代码图解:
由图可得:如果以小端存储将返回1,如果以大端存储将返回0。为了验证,也可以通过调试查看内存进行检验。
还可以用下方这段代码去探究大小端的采用情况,更加简洁。
#include <stdio.h>
char TestSizeEnd()
{
int i = 1;
return *(char*)&i;
//将int *的指针类型强制转换为char *再解引用,以char的视角读取一个字节。
}
int main()
{
if (TestSizeEnd())
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}