需要注意字节序的大端(big endian)和小端(little endian)的几种情景

大端(big endian):在内存中,按照从最低有效字节到最高有效字节的顺序存储对象,即数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中。
小端(little endian):在内存中,按照从最高有效字节到最低有效字节的顺序存储对象,即数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。
下图举例摘自CSAPP:
这里写图片描述
大多数Intel兼容机都用小端模式,IBM和Oracle的大多数机器使用大端模式。有些比较新的微处理器是双端法(bi-endian),即可以把它们配置成大端或小端的机器运行。但是,实际上,一旦选择了特定的操作系统,那么字节序也就固定下来了。对多数应用程序员来说,字节序是透明的,不需要关心,但是,在以下几种情景中,需要注意了:
1、在不同类型的机器之间通过网络传送二进制数据时,网络应用程序的编写必须遵守已建立的字节序规则,发送方将它的内部表示转换成网络标准,而接收方则将网络标准转换为它的内部表示;
2、在检查机器级程序时,阅读表示整数数据的字节系列时字节顺序很重要;
3、对于有些系统级编程来说,有时需要编写规避正常的类型的程序,比如C中的强制类型转换(cast)或联合(union)。
下面给出一个例子检测当前机器是大端存储还是小端存储:

BOOL IsLittleEndianMode()
{
    union _DATA
    {
        int Para1;
        char Para2;
    } data;
    data.Para1 = 1;
    BOOL RetVal = FALSE;
    if ( data.Para2 ==  1 )
    {
        RetVal = TRUE;
    }
    return RetVal;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值