C语言面试题--------大小端模式问题

第1题 解决大小端问题 使用union和指针两个方法来判断
了解概率 分别什么是大小端模式
大小端模式:就是表示一个数值放在内存中的格式,高位对高地址还是高位对低地址 , 注意一点的是 无论怎么存放 读取的时候还是从低地址开始读取 只是解析的时候不同 。用图形解释

概念就是
大端模式 高位对应低地址
小端模式 高位对应高地址 低位对应低地址
高对高则为小端(端口存的是低位 小的 则叫小端)‘
这里写图片描述

常见的面试题就是
用c语言写一个函数来测试当前机器的大小端模式
1:使用union测试
先把大概思路描述一下
union myunion
{
int a;
char b;
}
那么意味着 myuion的大小为4 int char是共用内存的
若我们先存储一个int 1到这个内存中 然后以char来读取
是不是 1 布局四个字节
char读取的时候从低位读取一个字节进行char解析
这里写图片描述
代码就是

union myunion
{
    int a;
    char b;
}

int is_little_endiam(void)
{
    uinon myunion u1;
    u1.a = 1;
    return u1.b//结合上图 
    //大端返回0  小端返回1;
}

uinon的存取本质就是指针的强制转换
那么我们也可以用指针来检测大小端
申请一个int a = 1;
用指针指向这块地址
用(char * )的方法进行读取
也可以达到uinion的效果

代码为

int is_little_endiam(void)
{
    int a  = 1char b =  *(char *)(&a);
     return b;
    return u1.b//结合上图 
    //大端返回0  小端返回1;
}
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值