C 语言编程 — 大小端区分

目录

大端、小端

大端:高位字节放在内存的低地址端,低位字节放在内存的高地址端,CPU 对操作数的存放方式从高字节到低字节。

小端:低位字节放在内存的低地址端,高位字节放在内存的高地址端,CPU 对操作数的存放方式从低字节到高字节。

假设我们的内存是这样的:
在这里插入图片描述

我们要存一个数据 0x44332211 到这块内存里面去如果系统是 小端模式 的话,存储方式如下图:
在这里插入图片描述

如果系统是 大端模式 的话,存储方式如下图:
在这里插入图片描述

区分方式 1

通过判断内存的低地址是否为 1 来区分大小端:指针类型转换,将长度大的 int 类型转换为长度小的 char 类型,最后再取 char* 指针的值,就知道数据 1 存放在高端地址还是低端地址了。

#include <stdio.h>


int main()
{
    int i = 1;
    (*(char*)&i == 1) ? printf("Little-endian\n") : printf("Big-endian\n");
    return 0;
}

区分方式 2

利用共用体的特点:使用长度最大的那个数据类型作为共用体的大小。所以,char a 使用的是 int b 的空间大小,判断 a 的值,也就是判断低地址的数据值。

#include <stdio.h>


union System {
    char a;
    int b;
};

int main()
{
    union System s;

    s.b = 1;
    printf("0x%x\n", &s.a);
    printf("0x%x\n", &s.b);

    if (s.a == 1) {
        printf("Little-endian\n");
    } else {
        printf("Big-endian\n");
    }

    return 0;
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__0809 返回首页
实付 49.00元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值