如果你想讓VB和其他軟件或儀器儀表進行通訊,就會經(jīng)常用到數(shù)值高低位轉換的問題。以下方法可以方便地解決。
一、新建一個模塊,復制下面代碼。
Option Explicit
' 用途:將二進制轉化為十進制
Public Function BIN_to_DEC(ByVal Bin As String) As Long
Dim i As Long
For i = 1 To Len(Bin)
BIN_to_DEC = BIN_to_DEC * 2 + Val(Mid(Bin, i, 1))
Next i
End Function
' 用途: 將十進制轉化為二進制
Public Function DEC_to_BIN(Dec As Long) As String
DEC_to_BIN = ""
Do While Dec > 0
DEC_to_BIN = Dec Mod 2 & DEC_to_BIN
Dec = Dec \ 2
Loop
End Function
' 用途:把數(shù)值轉換為高低字節(jié)形式
' 輸入:strSendVal(要發(fā)送的數(shù) 為整數(shù)型),nSendvalh (轉化后的高位),nSendvall (轉化后的低位)
'返回值:nSendvalh,nSendvall
Sub Val2HL(ByVal strSendVal As Long, nSendvalh As Integer, nSendvall As Integer)
Dim strSendValtoBin As String '將發(fā)送的數(shù)轉化為二進制
Dim strSendValh As String ''二進制高位
Dim strSendVall As String ''二制制低位
If strSendVal < 0 Then strSendVal = 32768 - Abs(strSendVal) '小于0 求補
strSendValtoBin = Format(DEC_to_BIN(strSendVal), "0000000000000000")
strSendValh = Mid(strSendValtoBin, 1, 8)
strSendVall = Mid(strSendValtoBin, 9, 8)
nSendvalh = BIN_to_DEC(strSendValh) + 128
nSendvall = BIN_to_DEC(strSendVall)
End Sub
' 用途:把高低字節(jié)形式還原為原數(shù)值
' 輸入:nSendvalh (轉化后的高位),nSendvall (轉化后的低位)
' 輸出:還原后的數(shù)值
Function HL2Val(ByVal nSendvalh As Integer, ByVal nSendvall As Integer) As Long
Dim strSendValtoBin As String '將發(fā)送的數(shù)轉化為二進制
Dim strSendValh As String ''二進制高位
Dim strSendVall As String ''二制制低位
strSendValh = Format(DEC_to_BIN(CLng(nSendvalh) - 128), "00000000")
strSendVall = Format(DEC_to_BIN(CLng(nSendvall)), "00000000")
HL2Val = BIN_to_DEC(strSendValh & strSendVall)
End Function
二、調用舉例
1、把數(shù)值轉換為高低字節(jié)形式
Dim H As Integer, L As Integer, V As Long
V = 1200
Val2HLV, H, L
Debug.Print H, L (H=132,L=176)
2、把高低字節(jié)形式還原為原數(shù)值
Dim H As Integer, L As Integer, V As Long
H=132
L=176
V=HL2Val(H,L) (V=1200)