LabVIEW编程实例:整数类型数值的高/低位分解与拼接方法

在上位机软件与底层硬件通信时,经常遇到将一个整数数值按高、低位分解成不同的两部分数值的情况,如将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等类型的数值其处理方法与是适用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值