判断机器大小端问题

大端存储:即高字节存储在低地址处,即高位先存,大端也叫“高尾端”
小段存储:即低字节存储在高地址处,即低位先存,小端也叫“低尾端”

大端存储:例如0x11223344,则44就是尾端,存储地址假如从0~4,则当存储这个数据时,将依次从低地址0向高地址4存储,且按照11~44的顺序存储就叫大端存储。
小段存储:例如0x11223344,则44就是尾端,存储地址假如从0~4,则当存储这个数据时,将依次从低地址0向高地址4存储,且按照44~11的顺序存储就叫小端存储。

接下来我们介绍两种判断大小端的方法

void Judge_port()
{
    int a = 1;
    char char*p = (charchar*) &a;
    if(*p == 1)
    printf("小端\n");
    else
    printf("大端\n");
}
上面这个程序解决这个问题的思想是怎么样的呢?
其实很简单,我们将a的地址强制转换成char型的,假设a=1在内存中的存储是以00 00 00 01的形式存放的,然后我们解引用这个指针,就可以看到00 00 00 01的第一个字节,如果是0,那么就是大端存储,如果得到的是1,那么就是小端存储。

第二种方法是利用联合体来解决这个问题
#include<stdio.h>
#include<stdlib.h>

void Judge_port()
{
    union t
    {
        int i;
        char c;
    }t1;
    t1.i = 1;
    if(t1.c = 1)
    printf("小端\n");
    else
    printf("大端\n");
}


int main()
{
    Judge_port();
    return 0;
}
要想理解联合的这种做法,首先我们来介绍一下联合的概念
联合:联合体的各个成员公用内存,并同时只有一个成员得到这块内存的使用权(即对内存的读写),而结构体的成员拥有各自的内存,各自互不干扰
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值