大小端存储--数据在内存中的存储方式
Posted 是七喜呀!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大小端存储--数据在内存中的存储方式相关的知识,希望对你有一定的参考价值。
何为大小端存储
举个例子
我们有下图中的int a = 36;
写出了对应的16进制发现数据在内存中存储的方式跟我们预想的有点不一样
这就是涉及到大小端存储的概念
大端存储:
指的是数据的低位存储到内存的高地址中,数据的高位保存到内存的低地址中。
小端存储:
指的是数据的低位存储到内存的低地址中,数据的高位保存到内存的高地址中。
那我们可以得知在我的机器的Visual Stdio 2019中,十进制数字36对应十六进制0x00 00 00 24 实际上是小端存储的(内存从左往右由低地址到高地址)。
为什么有大小端存储之分
我们知道计算机内存地址单元是以字节为单位的。但是在C语言中,我们有1个字节的char,两个字节的unsigned short int ,四个字节int,八个字节的double等等。再加上不同位数的机器 32,64位的机器,寄存器宽度大于一个字节,那么必然存在着如何安排这么多字节的问题。于是就有了大小端存储
设计小程序判断大小端存储
法一:
#include<stdio.h>
int Check_sys()
{
int i = 1;//0x00 00 00 01
char* p = (char*)&i;//我们结合不同指针类型进行加减操作的所往后偏移的字节数不一样
return *p;
}
int main()
{
int ret = Check_sys();
if (ret)
{
printf("小端存储");
}
else
printf("大端存储");
return 0;
}
法二:
#include<stdio.h>
int Check_sys()
{
union
{
int i;
char c;
}un;//匿名联合体,因为出函数就销毁所以我们可以使用
un.i = 1;
return un.c;
}
int main()
{
int ret = Check_sys();
if (ret)
{
printf("小端存储");
}
else
printf("大端存储");
return 0;
}
以上是关于大小端存储--数据在内存中的存储方式的主要内容,如果未能解决你的问题,请参考以下文章