大端字节序和小端字节序
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个字节的内容
- 取出低地址的值,结合之前的大小端的存储规则判断得出,这是大端还是小端
运行结果
以上是关于大端字节序和小端字节序的主要内容,如果未能解决你的问题,请参考以下文章