C语言--验证主机大小端字节序

字节序经常被分为两类:
  1. Big-Endian(大端):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
  2. Little-Endian(小端):低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
验证原理

计算机处理字节序的时候,不知道什么是高位字节,什么是低位字节。它只知道按顺序读取字节,先读第一个字节,再读第二个字节。

如果是大端字节序,先读到的就是高位字节,后读到的就是低位字节。小端字节序正好相反。

程序

有两种验证方法:

  1. 读取16进制数高低位,按照16进制数的高低位输出顺序判断;
  2. 利用联合体union中所有成员共用一块内存,对整块内存赋值,分块取出。

方法一:

void check_cpu()
{
    int a = 0x1234;
    char *p = (char *)&a;
    if(*p == 0x34)
        printf("Little-Endian\n");
    else if(*p == 0x12)
        printf("Big-Endian\n");
    else
        printf("unknow\n");
}

方法二:

void check_cpu()
{
    union{
        short value;
        char byte[2];
    }num;
    num.value = 0x1234;
    if(num.byte[0] == 0x34 && num.byte[1] == 0x12)
        printf("Little Endian\n");
    else if(num.byte[0] == 0x12 && num.byte[1] == 0x34)
        printf("Big Endian\n");
    else
        printf("unkonw\n");
}

通常,主机字节序一般是小端字节序网络字节序一般是大端字节序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值