您现在的位置是:首页 >学无止境 >判断大小端的错误做法网站首页学无止境

判断大小端的错误做法

确实可以 2024-06-11 18:01:02
简介判断大小端的错误做法

这里不详细讲解大小端的区别,只讲解判断大小端的方法。

1.大端,小端的区别

0x123456 在内存中的存储方式

大端是高字节存放到内存的低地址

小端是高字节存放到内存的高地址

2.大小端的判断

1.错误的做法

int main()
{
    int a=0x1234;
    char c=(char)a;
    
    if(c==0x12)
        cout<<"大端
";
    else
        cout<<"小端
";
    return 0;
}

应该有不少人是这样想的。直接就强制类型转换。

但是,int型数值赋给char型变量时,只保留其最低8位,高位部分舍弃。

所以在大端环境进行测试,这个例子也只能得到c==0x34,也即是小端。

强制类型转换等运算是编译器提供的运算,这个运算是高于内存层次的。

2.正确的做法

int main()
{
    int a = 0x12345678;
	char b = *((char *)(&a));		// 指针方式,取地址
	if(0x78 == b)
        cout<<"小端
"
    else if(0x12 == b)
	    cout<<"大端
";

    return 0;
}

取地址做法才是正确的。

还有一种使用联合体union做法,这种本质就是取地址做法。

3.总结

意识到直接进行强制类型转换来判断大小端是错误的。而虽然取地址方法也用到了强制类型转换,但其进行内存调用,取地址的,是可行的。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。