【C语言】判断|大端小端|指针意义

举报
謓泽 发表于 2023/09/23 18:32:52 2023/09/23
【摘要】 【C语言】判断|大端小端||指针意义

大端小端介绍:

  1. 大端:存储模式是内存中的低位保存在内存当中的高地址当中,而数据的高位,保存在内存低地址当中。
  2. 小端:存储模式是数据中的高位保存在内存当中的低地址当中,而数据的高位,保存在内存高地址当中。
  • 内存空间都是有编号的,我们都把内存的低位叫做低地址,编号大的话那么就是叫做高地址,数据是怎么样存储都是可以的,但是当返回到你的程序当中必须要是怎么样存储回来比如说你整形存储的是 11 22 44 33 (二进制转换十六进制 1个字节=4个bit位),那么你到时候就也是需要这样整形存储出来的 11 22 44 33 !但是我们通常都不会这样去存储内存。通常都是两种存储方法一种叫做大端的存储模式还有一种是小端的存储模式。
  • 假设是:0x11223344,这个44就是低位,而11就是高位,那么这个低位要保存到内存的高地址数,而数据的高位保存在低地址处——大端
  • 再次假设:0x44332211,这个44就是低位,而11就是高地址,低字节的数据保存在内存当中的低地址处,而高字节的数据就保存在高地址处——小端

判断大端小端

用代码实现判断大端小端:

解体思路:一个数字a,存储在内存当中,假设这个a是20的话,在不知情的情况下,不知道当前是大端还是小端的存储。但是,可以推测是不是大端还是小端,就像上面内容所说的那样。我们可以观察它们的第一个字节,就比如说:

  • int a = 1;
  • 小端:0x01 00 00 00  
  • 大端:0x00 00 00 01

代码演示 

#include<stdio.h>
int main(void)
{
	int a = 1;
	char *p = (char*)&a;
	if (*p == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}

运行结果🖊 

小端

 自定义函数代码

#include<stdio.h>
int Testing()
{
	int a = 1;
	char * pb = (char*)&a;
	if (*pb == 1)
		return 1;
	else
		return 0;
}
int main(void)
{
	int ret = Testing();
	//返回1代表的是小端,返回0代表的是大端
	if (ret == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}

运行结果🖊 

小端

在这里说下指针类型的意义

  1. 指针类型决定了指针解引用访问多少个字节,比如:char *p;那么这里*p只能访问一个字节,根据你自己定义的数据类型💨
  2. 指针类型决定了指针+1,-1的是几个字节,比如:char * p + 1;那么跳过的是一个字节 根据数据类型来判断 int就是4字节 
  • 注意:整形提升补的是最高位的符号位,'0'为正,'1'为负 💨
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。