C#学习--项目实战之数据储存

試著忘記壹切 提交于 2020-02-05 04:05:07

写在前面

上一篇文章讲解了串口通信的一些专业衍生内容,然后涉及到了一个问题,就是我觉得初学者比较难理解的数据储存,为什么说难理解呢,因为各大语言的IDE越来越强大,我们日常写的代码多是控制上层的,对底层了解不够,还有一个原因就是,它涉及到一个抽象的概念储存空间,这个空间可以抽象到一个模拟的堆栈,也能实际到一张内存卡。

关于硬件储存数据的原理

在写项目的时候,我们经常会遇到这样的情况,C#要用到C++,python写的方法库,类库。既然要相互兼容,那么语言和语言之间一定要有一个交点,通过这个交点来实现兼容,这个交点就是计算机原理,这个太过复杂,记住一点即可,电脑上所有一切软件,归根结底是一串二进制数,是现实中电路上的一个电压脉冲(关于这个知识点同学们可以百度关键字,第一代到第四代计算机,这个还是蛮有意思的),既然知道了这个,那我们就知道了,不管是什么类型,最终内存里的就是一个二进制,有些同学可能会有质疑,那么上代码

int demo = 100;//在内存中m = 0110 0100(HEX)
int result = demo>>8;//>>将二进制向右移动八位,空位补零=》0000 0000
result => 0

一个简单的例子就帮我们证明了,二进制才是万物的源头

关于数据的存储模式

这个知识点对于学习C++的同学应该马上就能说出个所以然来,但是学习C#,java等一些上层语言,可能就对这个知识点不太熟悉,其实很简单,数据存储模式分两种,大端模式,小端模式。小端模式下,数据储存的地址和二进制里的头尾是相反的,也就是说,小端模式下的二进制数1111 0000,实际上是0000 1111,大端模式则相反。
这个知识点在上层语言的交互中都用得很少,在与下位机做交互的时候基本上都会涉及,我也是最近通过一个传感器交互项目才了解到的,还是上代码给大家看一下吧

//小端模式
byte[] b = receivedData//receivedData是串口通信根据协议传输的一个数据
UInt32 m = BitConverter.ToUInt32(b.Reverse().ToArray(), 0);//Reverse()翻转,因为协议里规定是一个无属性的Int值,所以这里ToUInt

//大端模式
byte[] b = receivedData//receivedData是串口通信根据协议传输的一个数据
UInt32 m = BitConverter.ToUInt32(b.ToArray(), 0);//Reverse()翻转,因为协议里规定是一个无属性的Int值,所以这里ToUInt

写在结尾

结合上面讲的知识点,结尾给大家讲个科幻现实主义题材的小故事吧,有一个外星人,他乘飞船来到地球,他觉得地球上的东西真的太有意思了,他觉得把地球上的所有东西都扫描进它的电脑里,他用了一个模拟扫描仪扫描了整个地球,但是呢这个地球上的物种实在太多了,微生物啊,动物啊,植物啊。外星人的电脑的内存也放不下这么多东西,但是呢刚刚也说了,任何东西在电脑里存着也就是一串二进制代码,所以呢,外星人就把这些东西都转化成了二进制代码,在转换成十进制,再求倒数,就变成了一个接近无穷小的小数,然后他在飞船的边缘刻下了两个点,这两个经过特殊的运算就能还原这个接近无穷小的小数。就这样,外星人空手而来空手而归,带走的却是整个地球。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!