使用C语言程序判断当前系统大小端

我们首先的了解什么是小端模式,什么是大端模式(其实自己也不太懂,相互学习喽)

1>小端模式:

小端模式是指数据的低字节保存在地址的低地址中,而数据的高字节保存在内存的高地址中,跟我们的逻辑思维是比较一致的

2>大端模式

大端模式是指数据的低字节保存在内存的高地址中,而数据的高字节,保存在内存的低地址

我们先来举个例子:

int a = 0xff123456

我们知道,其中ff为高字节,56相当于最低字节

我们知道int是4个字节(32为操作系统)

那么其实在数0xff123456中两个数字代表一个字节,8位:

使用C语言程序判断当前系统大小端_第1张图片

我们再来看一下我写的简单的代码

//判断系统大小端模式,小端模式返回0,大端模式返回1;
int GetCurrentSysMode()
{
	int a = 0x1;
	char *p = (char*)&a;
        if(*p == 1)
	   return 0;
	else
	   return 1;
}
int main()
{
	cout<

哈哈,我的系统是小端模式

那么现在来分析为什么这个代码可以判断大小端就很容易理解了:

int a = 0x1就相当于是这样的(0x00000001):

使用C语言程序判断当前系统大小端_第2张图片

*如果是二进制就是这样的(int a = 1):

(小端:00000001   00000000  00000000  00000001)

(大端:00000000   00000000  00000000  00000000)

我们用char 类型的指针指向a,char是一个字节,其指向的是int的第一个字节,指针解引用就是

int的第一个字节存放的内容,如果这个值是1的话,那么就是小端模式,如果是0的话就是大端

模式。

************************************************************************************************************

我在网上看到一些用一个共用体写的一个判断大小端的函数的例子,分享给大家:

int GetCurrentSysMode()
{
	union
	{
		short a;
		char b;
	}temp;
	temp.a = 0x1234;
	if(temp.b == 0x12)
		return 1;
	else
		return 0;
}

int main()
{
	cout<


原理:

联合体union的存放顺序是所有成员都从低地址开始存放,而且所有成员共享存储空间

使用C语言程序判断当前系统大小端_第3张图片

haahahahahaahahahaha:就这样喽

你可能感兴趣的:(使用C语言程序判断当前系统大小端)