c语言指针内存空间——大小端存储问题

创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡>𖥦<)!! 

主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

目录

 一、什么是大端,什么是小端 

大端模式 

小端模式

二、为什么会出现大小端存储之分 

 三、怎样判断大小端


 一、什么是大端,什么是小端 

让我们来看一下0x123456在内存中的存储方式

 为什么会出现78 56 34 12这种存储顺序呢?这就是大小端的不同存储方式 

大端模式 

  低地址 -----> 高地址
  0x12 | 0x34 | 0x56 

小端模式

  低地址 -----> 高地址
  0x56 | 0x34 | 0x12 
不难看出大端模式比较符合人的直观认识,大小端(Endian)是指数据存储或者传输时的字节序

我们可以通过单字节循环输出查看:

#include <stdio.h>
int main()
{	
    int a = 0x12345678;
	char* p1 = &a;
	int* pi = &a;
	short* p2 = &a;
	printf("小端存储在内存中格式:87 65 43 21\n");
	printf("char*单字节输出:\n");
	for (int i = 0; i < 4; i++) {
		printf("\t%hhx\n", *p1);
		p1++;
	}
	printf("int*正常输出:%x\n", *pi);
	printf("short*双字节输出:\n");
	for (int i = 0; i < 2; i++)
	{
		printf("\t%hx\n", *p2);
		p2++;
	}
	printf("小端存储:由低位到高位在内存中存储,由高位到低位输出\n");
	return 0;
}

总结起来就是:
小端存储:低位存放在低地址(高位存放在高地址)
大端存储:低位存放在高地址(高位存放在低地址)

 小端存储:由低位到高位存储,由高位到低位输出!

二、为什么会出现大小端存储之分 

1. 一开始是由于不同架构的CPU处理多个字节数据的顺序不一样,比如x86的是小段模式,KEIL C51是大端模式。但是后来互联网流行,TCP/IP协议规定为大端模式,为了跨平台通信,还专门出了网络字节序和主机字节序之间的转换接口(ntohs、htons、ntohl、htonl) 

2. 大小端模式各有优势:小端模式强制转换类型时不需要调整字节内容,直接截取低字节即可;大端模式由于符号位为第一个字节,很方便判断正负。

 三、怎样判断大小端

由于指针指向的是内存中的首位地址,通过指针可以进行大小端的判断:

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
校名称、招生人数、录取最低分数线等信息),并能通过程序进行浏览、修改、添加、删除等操作。 高考录取模拟1 文件1学校信息文件是一道有挑战性的C语言综合题目设计。该题目的主要难点在于文件的读写等操作,需要用到文件指针、文件操作函数等知识点。 在设计该题目时,需要根据学校招生计划的信息定义一个结构体,并通过文件读写函数将该信息储存在外部文件中。同时,还需要实现基本的浏览、修改、添加、删除等操作功能。 浏览操作是最基本的操作之一,用户通过输入学校名称即可查询该学校的招生计划、招生人数、录取最低分数线等信息。如果需要修改该信息,用户需要输入管理员密码进行验证后才能进行修改。 添加操作是在已有学校招生计划的基础上新增学校招生计划。用户需要输入学校名称、招生人数、录取最低分数线等信息,系统会自动将该信息写入到外部文件中。 删除操作则是根据学校名称删除该学校的招生计划信息。用户需要输入管理员密码进行验证后才能进行删除操作。 总体来说,高考录取模拟1 文件1学校信息文件是一道综合性很强的C语言题目,在设计时需要充分考虑到文件操作、数据结构、用户交互等多个方面的细节。只有深入理解每个操作的实现原理,才能在实现过程中掌握更多的知识点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天喜Studio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值