C语言 ——— 大/小端存储模式的介绍及判断

目录

何为大端小端

如何测试当前机器是大端还是小端

编写代码,判断当前机器的字节序


何为大端小端

大端字节序存储模式:数据的低位字节的内容 存放在 内存的高地址 中,数据的高位字节的内容 保存在 内存的低地址 

小端字节序存储模式:数据的低位字节的内容 保存在 内存的低地址 中,数据的高位字节的内容 保存在 内存的高地址

 何为字节序:

数据以字节为单位,从而讨论的存储顺序

画图说明: 

举例:要存储的数据为: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时:此机器就是大端存储模式

  • 51
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值