使用C语言判断机器的大小端

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangqingchuan92/article/details/79072976

1.前言

1.1声明

文章中的文字可能存在语法错语以及标点错误,请谅解;

如果在文章中发现代码错误或其它问题请告知,感谢!

2.大小端的概念

2.1大端模式(Big-endian)

数据的高字节保存在内存的低地址中,数据的低字节保存在内存的高地址中,称为大端模式。


例如:32位存储系统中的大端模式,数据在内存中的存储如下图:


2.2小端模式(Little-endian)

数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,称为小端模式。


例如:32位存储系统中的小端模式,数据在内存中的存储如下图:


2.3大小端的总结

高字节在前为大端模式。

低字节在前为小端模式。

大端模式和小端模式没有优劣之分,大小端模式都有适用范围。在存储以及读取一定要按照相同的大小端模式进行,否者会出现数据解析错误。个人建议在进行数据存储的时候使用printf()函数将所有要存储的内容按字节打印出来,在数据读取后也使用prinf()函数将读取的内容按字节打印出来,这样就很容易看出是否读取存储有出入。

另外,很多公司的笔试题会有编写测试机器大小端的函数内容。

3.大小端判断方法

3.1使用联合体来测试机器的大小端

#include<stdio.h>
union test
{
	int a;
	char b;
}TEST;

int main(void)
{
	int i = 0;
	i = 1;
	TEST.a = i;
	if(1 == TEST.b)
	{
		printf("小端模式\n");
	}
	else
	{
		printf("大端模式\n");
	}
	return 0;
}

3.2使用指针来测试机器的大小端

#include<stdio.h>
char* test(void)
{
	int a = 1;
	char* b = (char *)(&a);
	return b;
}

int main(void)
{
	char* p = test();
	if (0x01 == *p)
	{
		printf("小端模式\n");
	}
	else
	{
		printf("大端模式\n");
	}
	return 0;

以上。

参考文档:

http://blog.csdn.net/my_heart_/article/details/51702277

https://baike.baidu.com/item/%E5%A4%A7%E5%B0%8F%E7%AB%AF%E6%A8%A1%E5%BC%8F/6750542?fr=aladdin

阅读更多

没有更多推荐了,返回首页