• 数据存储大小端


    大小端模式介绍

    • 大端(存储)模式:是指一个数据的低位字节序的内容放在高地址处,高位字节序存的内容放在低地址处。
    • 小端(存储)模式:是指一个数据的低位字节序内容存放在低地址处,高位字节序的内容存放在高地址处。(可以总结为“小小小”即低位、低地址、小端)

    MSB:MoST Significant Bit :最高有效位。
    LSB:Least Significant Bit :最低有效位。

    big-endian

    MSB存放在最低端的地址上。

    举例,双字节数0x1234以big-endian的方式存在起始地址0x00002000中:

    | data |<-- address
    | 0x12 |<-- 0x00002000
    | 0x34 |<-- 0x00002001
    

    在Big-Endian中,对于bit序列中的序号编排方式如下(以双字节数0x8B8A为例):

    bit | 0 1 2 3 4 5 6 7 | 8 9 10 11 12 13 14 15
    ------MSB----------------------------------LSB
    val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |
    +--------------------------------------------+
    = 0x8 B 8 A 
    

    little-endian

    little-endian:LSB存放在最低端的地址上。
    举例,双字节数0x1234以little-endian的方式存在起始地址0x00002000中:

    | data |<-- address
    | 0x34 |<-- 0x00002000
    | 0x12 |<-- 0x00002001
    

    在Little-Endian中,对于bit序列中的序号编排和Big-Endian刚好相反,其方式如下(以双字节数0x8B8A为例):

    bit | 15 14 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0
    ------MSB-----------------------------------LSB
    val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |
    +---------------------------------------------+
    = 0x8 B 8 A 
    

    大端小端检测方法

    #include <stdio.h>
    
    
    int main()
    {
    
        unsigned short x = 0x1234;
        char x0,x1;
    
        x0 = ((char*)&x)[0]; 
        printf("low address of x0 is%x:
    ",&x0);
        x1 = ((char*)&x)[1];
        printf("high address of x1 is%x:
    ",&x1);
    
        printf("x0=0x%x
    x1=0x%x
    ",x0,x1);//if output is x0=0x12,x1=0x34,it's big end,else it's little end
        return 0;
    
    }
    
  • 相关阅读:
    禾匠 运行h5
    禾匠 前端用户中心显示隐藏菜单
    禾匠 创建新插件
    芸众如何查看前端版本
    查看电脑内存条个数 和 内存是ddr几代
    yii框架中的andFilterWhere 和 andWhere的区别
    mysql 5.7之前版本截取json字符串的值
    FTP上传文件总是上传一半就断掉
    Java中如何保证线程安全性
    Java8内存结构解读
  • 原文地址:https://www.cnblogs.com/chay/p/10587404.html
Copyright © 2020-2023  润新知