大端(Big Endian)与小端(Little Endian)

    Byte Endian是指字节在内存中的组织,所以也称它为Byte Ordering或Byte Order。对于数据中跨越多个字节的对象,我们必须为它建立这样的预定:
(1)它的地址是多少?
(2)它的字节在内存中是如何组织的?
    对于跨越多个字节的对象,一般它的字节都是连续的,它的地址等于它所占字节最低地址。(链表的地址可看作链表头的地址)。
    多字节对象在内存中的组织一般有两种约定:Big Endian、Little Endian。
    在说明大端与小端方式前先提出两个概念:
    MSB(Most Significant Byte):最高有效字节。
    LSB(Least Significant Byte):最低有效字节。
    如int e = 0x11223344(在32位系统中占4个字节),e分为四个字节存放,0x11/0x22/0x33/0x44,MSB就是0x11,LSB就是0x44,其余字节位于MSB与LSB之间。
    LSB和MSB谁位于内存的最低地址,说明机器是何种内存组织方式。
    如果LSB放在最低地址,该机器使用小端方式;反之,MSB放在最低地址,该机器使用大端方式。
    DEC (Digital Equipment Corporation,现在是Compaq公司的一部分)和Intel的机器(X86平台)一般采用小端。IBM, Motorola(Power PC), Sun的机器一般采用大端。当然,这不代表所有情况。有的CPU即能工作于小端,又能工作于大端,比如ARM, Alpha,摩托罗拉的PowerPC。具体这类CPU是大端还是小端,应该和具体设置有关。(如,Power PC支持little-endian字节序,但在默认配置时是big-endian字节序)一般来说,大部分用户的操作系统(如windows, FreeBsd,Linux)是Little Endian的。少部分,如MAC OS ,是Big Endian 的。Little Endian还是Big Endian与操作系统和芯片类型都有关系。

大端、小端判断程序:
#include <stdio.h>

int IsLittleEndian(void)
{
    union {
        int a;
        unsigned char b;
    }u;

    u.a = 0x01;
    return u.b;
}

int main(void)
{
    if (IsLittleEndian())
        printf("Little Endian./n");
    else
        printf("Big Endian./n");

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值