当前位置: 首页 > article >正文

数据在内存中的存储【C语言版】

目录

1.举例:

2.深入刨析大端小端的组成:

3.判断当前编译环境是大端还是小端的方法

4.以函数的形式来判断当前的编译环境是大端还是小端【就是把判断大端小端的方法放进函数里面来实现,得到返回值,可以减少main()函数的内存】


数据在内存中的字节序存储有两种方式:一种是大端存储,另一种是小端存储。

决定数据在内存中的字节序存储方式的因素是当前编译器的环境【★★★★★】。

小端字节序存储:一个数据的低位字节的数据存放在内存的低地址处,高位字节的数据存放在内存的高地址处。【小端的数据举例:0x78563412=12 34 56 78】
大端字节序存储:一个数据的低位字节的数据存放在内存的高地址处,高位地址的数据存放在内存的低地址处。【大端的数据举例:0x78563412=78 56 34 12】
 

1.举例:

#include<stdio.h>
int main() {
    int a = 0x11223344;//当前的环境下数据是以小端的形式存放的,即:0x11223344=44 33 22 11;
    int b = 0x21;//小端存放,即:0x01=01 00 00 00;
    char* p =(char*) & b;//拿出来的是b的四个字节【这个是先取出对应地址,再强制类型转换】中,地址较小的那个字节的地址
    for (int i = 0; i < 4; i++) {
        printf("%0x\n",*(p+i));//%0x输出的是十六进制形式的整型
    }
    return 0;
}

运行结果:

2.深入刨析大端小端的组成:

#include<stdio.h>
int main() {
	int a = 10005;//a在内存中的存储形式是:15 27 00 00【5是个位,1是十位,7是百位,2是千位】
	             //(⚠★★★★★这个中的15是指十位是1,个位是5,与个位的15是F不能混为一谈)
	char* p = (char*)&a;
	for (int i = 0; i < 4; i++) {
		printf("%d\n", *(p + i));
	}//a=10005(十进制)=2715(十六进制)
	return 0;
}

运行结果:

图示:

3.判断当前编译环境是大端还是小端的方法

#include<stdio.h>
int main() {
	int a = 5;
	char* p = (char*)&a;
	printf("%d\n", *p);//直接看它的第一个字节输出的是什么,如果是0,说明是大端;如果是5,说明是小端

	if (*(char*)&a == 5) {
		printf("数据在内存中是以小端形式存放\n");
	}
	else
		printf("数据在内存中是以大端形式存放\n");
	return 0;
}

运行结果:

4.以函数的形式来判断当前的编译环境是大端还是小端【就是把判断大端小端的方法放进函数里面来实现,得到返回值,可以减少main()函数的内存】

#include<stdio.h>
int if_duan(int a) {//这个里面的形式参数可以设置成任何变量,和实际参数不一样也行,均不影响
	return  *(char*)&a == 5;
}
int main() {
	int a = 5;
	int ret=if_duan(a);
	if (ret = 1) {
		printf("数据在当前编译环境下是小端形式存储\n");
	}
	else
		printf("数据在当前编译环境下是大端形式存储\n");
	return 0;
}

运行结果:


http://www.kler.cn/a/468417.html

相关文章:

  • 大数据组件(三)快速入门实时计算平台Dinky
  • F#语言的网络编程
  • 基于GAN和RL的思想来训练对话生成
  • 查询Mysql中被锁住的表以及如何解锁
  • 第0章 机器人及自动驾驶SLAM定位方法全解析及入门进阶学习建议
  • 音视频入门基础:MPEG2-PS专题(5)——FFmpeg源码中,解析PS流中的PES流的实现
  • 数据表中的索引详解
  • reflow代码讲解
  • webpack5基础(上篇)
  • Flutter 实现 列表滑动过程控件停靠效果 学习
  • iOS 18 更新后恢复丢失 IPhone 数据的 4 种方法
  • JAVA:Spring Boot 集成 Quartz 实现分布式任务的技术指南
  • Java原型模式的面试题及其答案
  • windows11安装minikube
  • Vue2中使用Echarts
  • 【C语言】_const修饰指针变量
  • Gensim文本预处理
  • weblogic安装 12.2.1.4.0集群
  • PHP Array:精通数组操作
  • Meta探索大模型记忆层,扩展至1280亿个参数,优于MoE
  • 9.系统学习-卷积神经网络
  • 如何实现多条件搜索
  • Kali linux镜像站下载,比官网快
  • QT中Qstring和QByteArray有什么区别?
  • Linux(Centos版本部署)超详细教程
  • Go语言的基础知识