分享

LabVIEW高级编程技巧:如何从内存字节流中恢复原始数据

 lgk88888 2020-07-22

1、问题提出

大家在用LabVIEW写工控上位机软件时,可能会经常会遇到这样的问题,即当我们底层硬件模块已经调试完毕时,需要将硬件模块数据通过网口、串口或其它总线方式传输到上位机软件中,而上位机软件通过不同的通信协议接收到这些数据时,通常都是以字节流的形式存储到计算机的内存中(通常以某个变量暂时存储)。这些字节流中的数据可能以不同的方式代表实际的数据,比如,底层硬件可能发送的是ASCII码数据,一个字节代表一个字符数据,也有可能是单精度的浮点型数据,每4个字节代表一个数据点,甚至也有可能是更复杂的其它如结构体类型的数据等等。

那么我们如何将这些字节流数据正确恢复为底层硬件实际发送的数据呢?

这时候,LabVIEW中一个关键的“强制类型转换”函数就派上用场了。

2、“强制类型转换”函数说明

这个函数比较简单,它的输入输出参数及接口意义如下所示:

使用这个函数,可将任意类型的数据x转换为你想要类型对应的数据。从它的C语言语法表示的输出参数“*(类型*)&x”中,可以明显的看出,它实际上是先取出x的地址,然后将这个地址强制转换为指向你要转换的数据类型,最后再取出新类型对应的实际数据。

理解了这个函数的参数及意义后,下面通过两个小例子看看怎么用它恢复内存字节流中的数据吧。

3、由单字节表示的ASCII码字节流的恢复例子

比如,底层硬件发送一个字符串“abcdefgh”,那么使用网口调试助手可以看到,你接收到的数据字节流以16进制表示应该是61、62、63、64、65、66、67、68。

那么,使用强制转换函数将其恢复为字符串时,在类型参数上只需要连接一个字符串常量即可,其程序框图代码如下图所示,:

运行结果如下图所示,已经正确的将内存中的字节流数据转换为了字符串“abcdefgh”。

4、由四字节表示的单精度浮点型字节流的恢复例子

上个例子比较简单,如果底层硬件发送的是连续的由4个字节表示的单精度浮点型数据流,如连续的6个数值分别为1.1、2.2、3.3、4.4、-1.5、-2.5、那么使用强制转换函数将这个字节流数据恢复为其本身数值的程序框图代码如下图所示:

与上例不同的是,这儿的类型要给一个单精度类型的一维数组常数即可,运行结果如下图所示,可以看出,这个程序已经正确的将内存中的字节流数据转换为了单精度的一维数组的值。

5、总结

从上面两个小例子中可以看出,LabVIEW提供的”强制类型转换“函数是一个功能非常强大的函数,利用它可以将内存中任意的字节流数据转换为或者说映射为你想要的数据类型,从而避免了人为去写代码恢复实际的数据内容的过程。

本文由编码那些事原创,请关注+转发+收藏+点赞,带你一起长知识!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多