大端字节序和小端字节序

Posted Shemesz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大端字节序和小端字节序相关的知识,希望对你有一定的参考价值。

1.什么是大小端字节序

计算机硬件有两种储存数据的方式:大端字节序(MSB)和 小端字节序(LSB)。

小端字节序(LSB)

将这样的数据存储在计算机中,地址从低位到高位应该是:78 56 34 12

int a=0x12345678


一共四个字节的地址,假设从0x1001 ~ 0x1004;那么,对于小端字节序来说系统是这样存储的:

由图可以看出,小端字节序的存储规则是:数据的低位存储在地址低位,数据的高位存储在地址高位

大端字节序(MSB)
大端字节序就是这样存储

由图可以看出,大端字节序的存储规则:数据的高位存储在地址的低位,数据的低位存储在地址的高位

2.验证大小端字节序

首先直接上代码

#include <stdio.h>
  
int main()

    int     a = 0x12345678;
    char    *p = NULL;

    p = (char *)&a;

    if(*p == 0x78)
    
        printf("小端字节序\\n");
    

    if(*p == 0x12)
    
        printf("大端字节序\\n");
    

    printf("p = %x\\n", *p);

    return 0;

再来看原理:

  • 指针会指向整形变量的首地址,当我们调用*p往a的地址里面取值时,系统会根据指针类型大小取对应大小的值(char类型的指针就会从他指向的地址往里取char类型(1个字节)大小的值)
  • 当我们使用char类型的指针指向一个int类型的数,再通过 *p 取值时,只会去取其低地址位的1个字节的内容
  • 取出低地址的值,结合之前的大小端的存储规则判断得出,这是大端还是小端

运行结果

以上是关于大端字节序和小端字节序的主要内容,如果未能解决你的问题,请参考以下文章

大端字节序和小端字节序

大端字节序和小端字节序

大端字节序和小端字节序

大端字节序和小端字节序

字节序大端、小端

大端字节顺序和小端字节顺序有啥区别