如何判断大小端

什么是大小端?

大小端是指数据存储或者传输时的字节序,
具体分为大端小端
大端(Big-Endian)模式:是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中;地址由小向大增加,而数据从高位往低位放。
小端(Little-Endian)模式:是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
总结起来就是:
小端存储:低位存放在低地址(高位存放在高地址)
大端存储:低位存放在高地址(高位存放在低地址)
在这里插入图片描述

判断大小端的方法

第一种方法:字符指针判断在32位平台下,int占4个字节,而char类型的指针是占一个字节的,如果我们把int强传为char类型的指针,只会保存一-个字节的数据,那么我们只需要判断char里面的第-一个字节和int里面的第–个字节是否是一致即可判断。如果-致则为小端模式,反之为大端模式。

int  a=1;
if((char)&a==1){
小端
}
else{
大端
}

第二种方法:联合体判断由于联合体所有数据共享一块地址空间, 存放数据的所有成员都是从低地址开始存放,所以我们可以在联合体内定义一个int和一个char类型变量,然后在外部实例化的时候创建int变量,用char变量调用,相当于隐式类型转化,如果结果为1,则低字节存放在低地址,既是小端机器,反之大端机器。`

union Test
{
int a;
char b;
};
int main()
{ Test t;
t.a=1;
if(t.b==1)
小端
else
大端

猜你喜欢

转载自blog.csdn.net/chris__x/article/details/106023426