欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-08 12:48:34
...

大端(big endian):在内存中,按照从最低有效字节到最高有效字节的顺序存储对象,即数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中。
小端(little endian):在内存中,按照从最高有效字节到最低有效字节的顺序存储对象,即数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。
下图举例摘自CSAPP:
需要注意字节序的大端(big endian)和小端(little endian)的几种情景
大多数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;
}