zoukankan      html  css  js  c++  java
  • 大端模式和小端模式的理解

    1、前言

    大端模式(Big-Endian),是指数据的高字节存储在内存的低地址中,而数据的低字节存储在内存的高地址中,这样的存储模式有点类似把数据当作字符串顺序处理,地址从小向大增加,而数据从高位到低位存放,通常和我们的阅读习惯一致。

    小端模式(Little-Endian),是指数据的高字节存储在内存的高地址中,而数据的低字节存储在内存的低地址中,这样的存储模式将地址的高低和数据位权有效地结合起来。

    为什么会有大端模式和小端模式之分呢?这是由于在计算机系统中,是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit,但是在编程语言中,除了8bit的char数据类型以外,还有16bit的short数据类型,32bit的int数据类型等,需要看具体的编译器,另外,对于位数大于8位的处理器,例如,16bit或者32bit宽度的处理器,由于寄存器的宽度大于1个字节,那么必然存在着如何将多个字节安排的问题,因此就有了大端模式和小端模式存储的区分。

    2、实例

    简单分析一些实例,例如,数据0x12345678在内存中的存储形式:

    首先是大端模式存储,数据的高字节存储在内存的低地址端,数据的低字节存储在内存的高地址端,存储方式如下:

    低地址--------------->高地址
    0x12 | 0x34 | 0x56 | 0x78

    而小端模式存储,则是数据的高字节存储在内存的高地址端,数据的低字节存储在内存的低地址端,存储方式如下所示:

    低地址--------------->高地址
    0x78 | 0x56 | 0x34 | 0x12

    接下来,看看一个具体的例子,32bit宽度的数据0x12345678在大端模式和小端模式下,在内存中的存储形式,假设该数据从内存地址0x4000开始存储,如下:

    内存地址 大端模式存储 小端模式存储
    0x4000 0x12 0x78
    0x4001 0x34 0x56
    0x4002 0x56 0x34
    0x4003 0x78 0x12

    大端模式和小端模式存储,并没有谁优谁劣的说法,各自的优势便是对方的劣势,在小端模式下,强制转换数据不需要调整字节的内容,1、2、4字节的存储方式一样,大端模式下,符号位的判定固定为第一个字节,容易判断正负,一般操作系统为小端模式,而通讯协议为大端模式,对于ARM处理器,可以工作在小端模式,也可以工作在大端模式。

    3、机器字节序判断

    对于机器字节序的判断,可以通过编写一个简单的测试程序进行判断,如下:

    #include <stdio.h>
    
    unsigned char IsBigEndian(void)
    {
        int a = 0x12345678;
        char b = *(char *)&a; /* 取出低地址保存的数据 */
    
        if (b == 0x12)
            return 1;
        else
            return 0;
    }
    
    int main(int argc, char *argv[])
    {
        unsigned char flag = IsBigEndian();
    
        if (flag)
            printf("Big-Endian
    ");
        else
            printf("Little-Endian
    ");
        
        return 0;
    }

    还有更多的判断方式判断,可以自行了解。

    4、小结

    本文简单总结了大端模式和小端模式这两种数据存储方式的理解。

  • 相关阅读:
    Entity SQL 初入
    ObjectQuery查询及方法
    Entity Framework 的事务 DbTransaction
    Construct Binary Tree from Preorder and Inorder Traversal
    Reverse Linked List
    Best Time to Buy and Sell Stock
    Remove Duplicates from Sorted Array II
    Reverse Integer
    Implement Stack using Queues
    C++中const限定符的应用
  • 原文地址:https://www.cnblogs.com/Cqlismy/p/12904724.html
Copyright © 2011-2022 走看看