大端序和小端序

本文介绍了计算机科学中的大端序和小端序概念,详细解释了这两种字节序的区别,并通过实例展示了不同字节序下整数在内存中的存储方式。此外,还提供了一段C程序来帮助读者判断自己的机器采用的是哪种字节序。

什么是大端序和小端序

给定一个32位整数0x1234abcd,在内存里是怎么存放的呢?

假定存放这个整数的内存起始地址是0x0001,那么内存中存放这个整数有两个可能:

|0x0001|0x0002|0x0003|0x0004|
| 12   | 34   | ab   | cd   |

或者:

|0x0001|0x0002|0x0003|0x0004|
| cd   | ab   | 34   | 12   |

第一种情况是高位字节在前,叫做大端序(big-endian)。
第二种情况是低位字节在前,叫做小端序(little-endian)。

不同的CPU架构有不同的选择,有的使用大端序存放整型、长整型;有的使用小端序存放整型、长整型。
x86架构的CPU都使用小端序,即低位字节放在前面。而POWER PC使用大端序。

一个整型数在网络中传输时,也有字节排序的问题。这是个约定俗成的问题。网络字节序就是big-endian,即排在前面的字节是高位字节。

大端序和小端序的判断

怎么判断自己使用的机器是大端序还是小端序呢?使用下面的C程序:

#include <stdio.h>

int main(int argc, char *argv[])
{
    int i = 1;
    char *p = (char*)&i;
    if(p[0] == 1) {
        printf("little endian\n");
    }
    else {
        printf("big endian\n");
    }
    return 0;
}

原理是取整型数1的第一个字节。如果是小端序存放,即低位字节在前,那这个字节的值一定是1;否则是0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值