zoukankan      html  css  js  c++  java
  • 字节序

    大端和小端,到底是什么意思?

    字节序是数据在内存中存放顺序。字节分高有效位和低有效位,最左边是高位最右边是低位。我们按照地址生长的方向依次往内存写入数据,如果高有效位的数据先写入就是 big endian,如果低有效位先写入就是 little endian。字节序仅仅与数据的存储方式有关,与语言没有关系,没有 java 字节序或者 C 字节序的区分。

    举个例子,存入一个 4 字节的数据 0x0A0B0C0D,最高有效位的字节是 0A,最低有效位的字节是 0D,如果在内存存储中,0A 位于连续内存最小的那个就是 big endian,反之如果最小地址存储 0D 就是 little endian。

    big endian

    big endian 存放顺序是最高有效位,次高有效位,一直顺序存储到最低有效位,数据和内存都是按照顺序依次连续存储的。little endian 也是依次存储,但是高低位刚好相反,如下图所示

    little endian

    需要注意的是,无论是 4 个字节还是 8 个字节,存储的顺序都是在连续内存依照高位到低位或者低位到高位的顺序读取和写入,比如我们有 3 个字节 0x123456,如果内存中保存的数据从小内存地址到大内存地址依次位 0x12,0x34, 0x56,那么就是 big endian,反之是 little endian。

    附上 C 语言测试字节序的程序

    void judge_endian(void)
    {
        int a = 1; //存储0x00000001到内存
    
        if(*(&a) == 1){
    	    //&a是a的地址,保存了1个字节的数据,如果为1,说明低有效位先保存,则为小端
            printf("Little Endian
    ");
        } else {
            printf("Big Endian
    ");
        }
    }
    
  • 相关阅读:
    deepin 配置开发环境
    Springcloud学习笔记(一)总述
    Linux(Centos7) 配置 Tomcat 开机自启
    Linux下安装JDK8
    CentOS7 防火墙和端口管理
    Linux 下安装 MySQL8 教程
    WPF使用CefSharp嵌入网页
    WPF使用第三方字体(TTF字体)
    Hive学习笔记 --Permission denied: user=anonymous, access=READ
    SpringBoot jar 注册windows服务
  • 原文地址:https://www.cnblogs.com/bugxch/p/13833564.html
Copyright © 2011-2022 走看看