目录
何为大端小端
如何测试当前机器是大端还是小端
编写代码,判断当前机器的字节序
何为大端小端
大端字节序存储模式:数据的低位字节的内容 存放在 内存的高地址 中,数据的高位字节的内容 保存在 内存的低地址 中
小端字节序存储模式:数据的低位字节的内容 保存在 内存的低地址 中,数据的高位字节的内容 保存在 内存的高地址 中
何为字节序:
数据以字节为单位,从而讨论的存储顺序
画图说明:
举例:要存储的数据为:0x112233445566
解析:0x11 22 33 44 55 66
0x 表示为 十六进制,最低位为 66,最高位为 11
一个十六进制 的数据在内存中存储占 4个bit位,那么 两个十六进制 的数据在内存中存储占 8个bit位,也就是 1个字节
所以 每两个十六进制 为 一个字节,那么不论是在 大端字节序 还是 小端字节序 存储模式都是 两两十六进制为一组 而存储的
如何测试当前机器是大端还是小端
从内存的角度看:
从 0x00AFFA28地址 到 0x00AFFA2C地址,相差了 4个字节,刚好就是 变量a的大小
且 0x00AFFA28地址 到 0x00AFFA2C地址,是 由低到高递增的
从图中可分析出:变量a 的 低字节44 是存储在 低地址0x00AFFA28中的,所以可以确定 当前机器是小端存储模式
切换内存显示的列数(切换为1列1显示):
此时就能更直观的看到 变量a的数据 在内存中的存储,是以小端存储的
编写代码,判断当前机器的字节序
代码演示:
#include<stdio.h>
int main()
{
int a = 1;
char* pa = &a;
if (*pa == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
代码解析:
创建一个 整型变量a,初始值 赋值为1,那么 变量a 的 大/小端存储模式 如下图解析:char* pa = &a;
指针的相关知识请见:C语言 ——— 指针和指针类型-CSDN博客
将 变量a的首地址(低地址) 取出来,存放在 char*类型的 指针变量pa 中
那么 char*类型 的 指针变量pa 解引用后只能访问到 一个字节,也就是只能访问到首地址(低地址)
解析:if (*pa == 1)
所以只需要判断 指针变量pa 解引用后的值
值为1时:此机器就是小端存储模式
值为0时:此机器就是大端存储模式