前言
新手处女作,写的不好多多海涵,如发现错误烦请指正!欢迎沟通交流。
一、 什么是大端、小端
- 其实大端、小端指的是字节序。字节序简单来说就是大于一个字节的数据在内存中存放的顺序。
在32位的系统下,存放一个int型数据需要4个字节(32个bit位)
- 大端字节序:整数的高位字节存储在内存的低地址处。
定义一个int型的整形x等于15
小端字节序:整数的高位字节存放在内存的高地址处。
二、 如何判断大端和小端(c语言实现)
>方法一:指针法
- 先在内存中存储一个整形的1,并用一个char类型的指针指向它,因为32位系统下char只占一个字节并指向内存中低地址处,如果是小端存储模式,整型1的有效位01(16进制)会存储在内存的低地址处,正好为char指针所指位置。
- 反之如果是大端存储模式,整型1的有效位会存储在内存的高地址处,char指针则会指在0处。 以下为代码实现:
#include<stdio.h>
int main()
{
//32位系统下
//0000 0000 0000 0000 0000 0000 0000 0001
int a = 1;
//利用char类型指针进行判断
char* test = (char*) & a;
if (*test == 1)
{
printf("小端");
}
if (*test == 0)
{
printf("大端");
}
return 0;
}
>方法二:联合体
- 定义一个联合体,里面定义一个整型b和一个char类型a,因为联合体的特性,a、b共用一块内存空间,接下来初始化a为1,使得整型b的低位值也相应变化,后面判断方式和方法一类似不再赘述。
- 以下为代码实现:
#include<stdio.h>
union U
{
char a;
int b;
}u;
int main()
{
//初始化联合体
u.a = 1;
if (u.a == 1)
{
printf("小端");
}
if (u.a == 0)
{
printf("大端");
}
return 0;
}