大端与小端的判断(之前在某贴下面看到了错误版本~_~)

《关于大端与小端的判断问题》
1. 什么是大端、小端?
    大端:低位字节排放在内存的高地址端
    小端:高位字节排放在内存的高地址端
0x11223344 低地址(内存) 高地址(内存)
高尾端(大端) 11 22 33 44
低尾段(小端) 44 33 22 11
2. 判断方法
    1. 使用共用体
//是否为大端
bool IsBigEndian(){
union NUM{
int a;
char b[4];
}num;
num.a = 0x11223344;
//之前在某篇面经里发现在讨论区说下面应该是num.b[3],当时以为是对的,实际是错的!!
    //首先共用体的所有数据成员公用一块内存
    //其次,数组在栈中是按照地址增长的顺序排布的(栈的低地址到高地址)
    //你想想。int* p = new int[10]; ++p访问后面的元素
//划重点!!!if(num.b[3] == 0x11)是错的!!!
if( num.b[0] == 0x11 ){
return true;
}
return false;
}
    2. 直接判断
int main()
{
    short int x;
    char x0,x1;
    x=0x1122;

    x0=*((char*)&x); //低地址单元 ,或者((char*)&x)[0];会产生内存截断
    x1=*((char*)&x + 1); //高地址单元,或者((char*)&x)[1];会产生内存截断

    printf("x0=%x\nx1=%x\n",x0,x1);
}
//若x0=0x11,则是大端;若为0x22是小端






#面试#
全部评论
点赞评论收藏三连了!!
点赞
送花
回复
分享
发布于 2022-02-21 22:26

相关推荐

造车新势力 自动驾驶规控 29k * 13
点赞 评论 收藏
转发
1 2 评论
分享
牛客网
牛客企业服务