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、小结

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

  • 相关阅读:
    mysql相关笔记
    qt杂项
    rpm离线安装整理
    linux fopen个数限制的问题(文件描述符限制)
    解决free():invalid pointer:0x00000000000000155455 ****的问题。
    linux c获取系统时间戳
    ubuntu QT Creater 安装
    LinkedHashMap如何保证顺序性
    HashMap原理(二) 扩容机制及存取原理
    HashMap原理(一) 概念和底层架构
  • 原文地址:https://www.cnblogs.com/Cqlismy/p/12904724.html
Copyright © 2011-2022 走看看