问题提出

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

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

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

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

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

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

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

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

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

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

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

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

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

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

总结

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

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

2个字节能存多少个16进制_LabVIEW高级编程技巧:如何从内存字节流中恢复原始数据...相关推荐

  1. java一个byte字节可以存2个16进制字符

    一个字节是8位(bit),xxxxxxxx ,范围从00000000 - 11111111,表示0到255. 一个16进制字符(用二进制表示是xxxx)最多只表示到10进制的15(即16进制的F) 要 ...

  2. 2个字节能存多少个16进制_初探JVM字节码 - 疾风老头

    作者: LemonNan 原文地址: 代码地址: 字节码 概述 本篇要介绍的是能 "一次编译,到处运行的 JVM 字节码" 为什么能到处运行? 是因为在 任意平台下所编译出来的 c ...

  3. 2个字节能存多少个16进制_MySql中的varchar长度究竟是字节还是字符

    mysql-varchar 在设计数据库字段的时候,varchar类型,是不是纠结过到底该设置为多大呢? 看完这篇文章,你能搞清楚以下问题: mysql: 1.varchar(100)和varchar ...

  4. 2个字节能存多少个16进制_Java语言中最大的整数再加1等于多少?看完秒懂

    短文涨姿势,看了不白看,不关注等啥? 已知Java语言中int类型所能表示的最大整数为2147483647,请问以下代码执行结果是什么? 一部分人都会认为这段程序压根就无法通过编译,也有人认为,这段程 ...

  5. 2个字节能存多少个16进制_多个二进制分析工具各项性能进行的分析与比较

    看玄武的公众号的时候看到了这篇文章.二进制工具分析的主要是程序的各种信息,比如格式.体系结构.编译器标识.指令.助记符等. 反汇编 概览 IDA是HexRays公司的商业产品,这个也是大家最熟悉的了. ...

  6. 5.IDA-文本搜索、二进制搜索(16进制字节序列)、替换16进制

    1.文本搜索 IDA文本搜索相当于对反汇编列表窗口进行子字符串搜索.通过Search▶Text(热键:ALT+T)命令启动文本搜索 选择Find all occurences(查找所有结果),IDA将 ...

  7. 字节、字符串,以及16进制字符串的字节长度

    前提 公司有个项目使用到第三方厂商的硬件sdk,其中硬件的设置中有个配置项的单位是字节长度,一开始以为是字符串长度,后来发现不对,仔细排查才发现是字节长度. 知识点 字节(Byte)是一种计量单位,表 ...

  8. socket 收不到16进制 数据_UDP编程-套接字(socket)

    #千锋逆战班,计算机网络# ********************************命运从不偏袒任何人********************************** 却会垂怜认真生活的人 ...

  9. python把浮点数转换成16进制_delphi 浮点数float转换成十六进制字符串的方法(FloatToHex)...

    重新书写了float型转为十六进制的delphi程序 Function FloatToHex(Value: single): string; var l, i: integer; HexText,te ...

最新文章

  1. jq 修改swal的标题_js-jquery-SweetAlert【一】使用
  2. PhD养成记 | 于歆杰:如何有效获取、归档和阅读文献
  3. SQL Server 一些使用小技巧
  4. 嗷嗷嗷,kuangbin大大博客上拉的题
  5. 深度学习每层的通道数如何计算_深度学习基础系列(一)| 一文看懂用kersa构建模型的各层含义(掌握输出尺寸和可训练参数数量的计算方法)...
  6. 【CEO赠书】《精益数据分析》:如何构建数据指标体系
  7. C语言头文件、库文件的查找路径
  8. 微信小程序6 - 页面之间传参及通知系统封装
  9. VIO Estimator::processIMU 函数
  10. arailsdemo 1
  11. 应用密码学:协议、算法与C源程序(学习第二章)
  12. 工具说明书 - Windows资源监视器: Resource Monitor
  13. WinRAR压缩软件安装步骤
  14. 类似京东商城客户端应用源码
  15. 扇区 物理块 逻辑块 flash 基础概念
  16. 计算机一级如何启动ie浏览器,ie,详细教您怎么解决ie浏览器打不开的问题
  17. Java输出PPT文件(二) - 占位符数据替换
  18. 白鹭引擎学习笔记(二)
  19. Verilog硬件描述语言 西安电子科技大学 蔡觉平主讲 P8 语言设计思想和和可综合特性、组合电路设计 课程笔记
  20. [渝粤题库]广东开放大学 社会调查与方法 形成性考核

热门文章

  1. 在CISCO交换机上配置SSH
  2. 如何进行无线网络中继设置
  3. SilverLight学习笔记--如何在xaml文件中操作用户在后台代码定义的类(2)--示例篇:创建一个登录控件(原创)(转载本文请注明出处)...
  4. 用EDTS8对“吊死”用户进行自动释放
  5. 函数中使用栈与使用堆时函数执行效率浅对比
  6. AfxBeginThread
  7. PAT甲级1088 Rational Arithmetic:[C++题解]分数的加减乘除
  8. Leetcode1688. 比赛中的配对次数[C++题解]:简单题模拟
  9. Linux信号 四 异步等待信号与同步等待信号接口
  10. python能谢什么_python可以写什么啊