网站首页 > 编程文章 正文
在上位机软件与底层硬件通信时,经常遇到将一个整数数值按高、低位分解成不同的两部分数值的情况,如将U32类型的数值0x12345678拆分为两部分,即高16位0x1234,低16位0x5678,两部分代表不同的含义。或者反过来的情况,即将两个16位数值0x1234和0x5678拼接成一个数值32位数值0x12345678。
那么,在LabVIEW中有哪些方法可以实现将一个整数数值的按照高、低位分解成两部分或者反过来进行拼接呢?下面通过一个例子进行说明。
实例说明
这个例子的功能是将一个U32类型的整型数字按照不同的方法分解为高低两部分U16类型的数值,并且再将这两个U16类型的数值拼接成原始的U32型数值。软件运行主界面如下图所示:
这个例子中提供了五种方法,在主界面可通过“计算方式”单选框进行选择,分别为直接函数法、数据移位法、求商和余数法、强制转换法(数组)和强制转换法(簇),选择完计算方式后,点击计算按钮可显示对应的拆分及拼接结果。下面分别介绍这五种方法的具体程序框图实现过程。
直接函数法实现
这种方法直接利用LabVIEW软件中提供的“拆分数字”和“整数拼接”两个函数实现,程序框图代码如下图所示:
说明:这儿的计算过程放在了“计算”按钮的值改变事件中实现,在该事件中,根据“计算方式”选择的不同,在选择结构里面实现相应的计算。
数据移位法实现
这种方法利用“逻辑移位”、“与”及“或”函数配合实现,程序框图代码如下图所示:
当拆分时,将原始U32数值先右移16位得到高16位数值,将原始数值与0xFFFF相与后,得到低16位数值。
当拼接时,将高16位数值左移16位后再与低16位数值相或运算,就可得到原始的U32数值。
求商和余数法实现
这种方法程序框图代码如下图所示:
其拆分原理是利用“商与余数”函数将原始数值除以0x10000(即2的16次方),相当于右移16位,其整数部分即为高16位数值,其余数部分即为低16位数值
其拼接原理是拆分的逆过程,将高16位值乘以0x10000然后与低16位相加即可得到原始的U32数值。
实际上这种方法在本质上同上种数据移位的方法是相同的。
强制转换法(数组)实现
这种方法利用“强制类型转换”函数将原始U32类型数值转换为一维数组,然后进行拆分与拼接的实现,程序框图代码如下图所示:
当拆分时,将原始U32数值强制转换为U16类型的一维数组,那么数组的前两个元素就分别为高16位数值和低16位数值。
当拼接时,将由高16位数值和低16位数值组成的一维数组强制转换为U32类型的一个标量数值,该数值即为原始的U32数值。
强制转换法(簇)实现
这种方法利用“强制类型转换”函数将原始数值转换为簇类型(此处簇相当于C语言的结构体类型),然后进行拆分与拼接的实现,程序框图代码如下图所示:
这儿创建一个包含两个U16类型元素的簇,借助于该簇完成拆分与拼接功能。
对于都包含两个U16类型元素的一维数组和簇,由于在内存中数据的实际存放方式是完全相同的,因此,在本质上这种方法与上种方法强制转换为一维数组是相同的。
总结
这儿介绍了五种将整数数值按高低位分解及拼接的方法。例子中是以U32类型的数值进行说明的,当然,对于其它类型如U16、U64等类型的数值其处理方法与是适用的。
如果这篇文章对你有用的话,请关注+转发+收藏+点赞吧。
猜你喜欢
- 2024-10-12 LabVIEW编程实例:手把手教你按键监视小软件的实现
- 2024-10-12 LabVIEW编程实例:如何通过TCP协议进行数据通信
- 2024-10-12 LabVIEW中综合使用事件结构+属性节点+调用节点的例子
- 2024-10-12 LabVIEW编程实例:子面板控件动态加载、运行并显示不同的子程序
- 2024-10-12 LabVIEW编程实例:趣味流水灯程序设计
- 2024-10-12 LabVIEW编程实例:模拟温度采集+报警灯指示+运行记录输出
- 2024-10-12 简单Labview实操案例(labview 教程)
你 发表评论:
欢迎- 05-142014年最流行前端开发框架对比评测
- 05-14七爪源码:如何使用 Next.js 构建 Shopify 店面
- 05-14Web 前端怎样入门?
- 05-14我为什么不建议你使用框架
- 05-14推荐几个好用的React UI 框架
- 05-14PDFsharp:强大的 .NET 跨平台 PDF 处理库
- 05-14一组开源免费的Web动画图标,荐给需要的设计师和程序员
- 05-14salesforce 零基础学习(二十九)Record Types简单介绍
- 最近发表
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)