关于大小端的问题

本文详细解析了计算机系统中大小端模式的概念,通过实例说明了低字节存储位置的不同对数据读取的影响。同时,提供了一段用于检测当前CPU是采用大端还是小端模式的测试代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

讨论大小端的问题就是在讨论低字节存储在低地址还是高地址的问题

大小端记忆方式:

1、小端模式:低字节存储在低地址上

2、大端模式:低字节存储在高地址上

例题:unsigned int a= 0x1234; unsigned char b=*(unsigned char *)&a; 在32位大端模式处理器上变量b等于()?

解析:
unsigned int a= 0x1234的32位完全表示是0x00001234
由低地址到高地址依次为(假设低地址为0x4000),则其在大端的分布如下:

0x4000        0x4001     0x4002      0x4003
00            00          12          34
  •  

则a的地址&a0x400,char类型占一位,因此b的值为:0x00
同理如果是小端则值为:0x34

 

判断CPU大小端测试代码1.

int checkCPU(void)  
{  
    union  
    {  
        int a;  
        char b;  
    }c;  
    c.a = 1;  
    return (c.b == 1);  
}  

由于union变量的地址和它的各成员的地址都是同一地址,并且union的存放顺序是所有成员都从低地址开始存放的,所以可以利用这两个特点来检测CPU是大端模式还是小端模式。

首先,1的内存地址是:0x00 00 00 01(因为1位整型,占用四个字节,而char只会占用一个字节),其中数据源的高字节是:0x00,低地址处是:01。

如果CPU是小端模式的话,则c.a从低地址处开始存放的就是低字节数据,也就是01,所以 c.b就会被赋值为0x01;

如果是大端模式的话,则c.a从低地址处开始存放的就是高字节数据,也就是0x00,所以c.b就会被赋值为0x00。

这样的话,根据c.b的赋值情况就可以看出CPU是小端模式还是大端模式了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值