字节序

作者: 翼动晴空 | 来源:发表于2017-04-26 14:15 被阅读27次

    字节序:是由于CPU和OS对多字节变量的存储顺序不同而产生的

    例如一个16位的整数,它由2个字节组成,有的操作系统会把高位字节放在内存的低地址上,有的操作系统会把高位字节放在内存的高地址上。

    一般有2种表示:

    • 小端字节序:在表示变量的内存地址的起始位置存放低字节,高字节顺序存放
    • 大端字节序:在表示变量的内存地址的起始位置存放高字节,低字节顺序存放

    例如变量:0xabcd,假设存放值0xabcd的内存地址的起始地址为0

    • ——小端字节序:0xab在地址15~8的位置上,0xcd在地址7~0的位置上
    • ——小端字节序:0xab在地址7~0的位置上,0xcd在地址15~8的位置上

    写出一个程序,判断系统字节序类型

    #include <stdio.h>
    
    /* 联合类型的变量类型,用于测试字节序
     * 成员value的高低端字节可以由成员type按字节访问
     */
    typedef union{
            unsigned short int value;                                                               /*短整型变量*/
            unsigned char byte[2];                                                          /*字符类型*/
    }to;
    
    int main(int argc, char *argv)
    {    
            to typeorder ;                                                                          /*一个to类型变量*/
            typeorder.value = 0xabcd;                                                               /* 将typeorder变量赋值为0xabcd */
        
            /* 小端字节序检查 */
            if(typeorder.byte[0] == 0xcd && typeorder.byte[1]==0xab){               /*低字节在前*/
                    printf("Low endian byte order"
                                    "byte[0]:0x%x,byte[1]:0x%x\n",
                                    typeorder.byte[0],
                                    typeorder.byte[1]);    
            }
        
            /* 大端字节序检查 */
            if(typeorder.byte[0] == 0xab && typeorder.byte[1]==0xcd){               /*高字节在前*/
                    printf("High endian byte order"
                                    "byte[0]:0x%x,byte[1]:0x%x\n",
                                    typeorder.byte[0],
                                    typeorder.byte[1]);    
            }
        
            return 0;    
    }
    

    运行结果

    wangande@wangande-MS-7808:~/workspace/Linux-net/source/08$ gcc check_order.c -o check_order
    wangande@wangande-MS-7808:~/workspace/Linux-net/source/08$ ./check_order 
    Low endian byte orderbyte[0]:0xcd,byte[1]:0xab
    

    作者的系统为小端字节序存储

    相关文章

      网友评论

        本文标题:字节序

        本文链接:https://www.haomeiwen.com/subject/esmizttx.html