百度面试题

简述一下什么是大小端字节序,并设计程序判断当前机器的字节序;-百度面试题-10分

解:

大端字节序: 

指数据的低位字节内容保存在内存的高地址处,数据的高位字节内容保存在内存的低地址处;

假设一个16位的整数 0x1234 在内存中的地址从 0x1000 开始,那么在大端模式下,它在内存中的存储情况如下:

内存地址   存储的数据
0x1000    0x12
0x1001    0x34
正序

小端字节序:

指数据的低位字节内容保存在内存的低地址处,数据的高位字节内容保存在内存的高地址处

同样以16位的整数 0x1234 为例,在小端模式下,它在内存中的存储情况如下:

内存地址   存储的数据
0x1000    0x34
0x1001    0x12
倒序

判断机器字节序

#include <stdio.h>

int main() {
    unsigned int test = 1; // 设置整数值为1
    char *p = (char *)&test;//test为4个字节,强制转换为char*取第一个字节,如果第一个字节是00则是大端,如果第一个字节是01则是小端;

    // 如果*p是1,那么系统是小端;如果是0,则是大端
    if (*p) {
        printf("Little-Endian\n");
    } else {
        printf("Big-Endian\n");
    }

    return 0;
}
 

方法二:联合体:联合体成员同时占用一块空间,int开辟四个字节大小,赋值为1,char访问一个字节,如果为0说明大端,如果为1说明小端

#include<stdio.h>

int main() {

    union {

        char i;

        int a;

    }s;

    s.a = 1;

    if (s.i == 1)printf("xiaoduan");

        if(s.i==0)printf("daduan");

}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值