一、字节数组转换为字符串 dim bTemp() As Byte dim sData as String '接收数据到bTemp中 ..... '然后: sData = StrConv(bTemp, vbUnicode, &H804)二、字符串转换为字节数组 bTemp= StrConv(sData , vbFromUnicode)
谢谢 兔子! 不过对那个&H804,我还不是很清楚,MSDN上面写的我也看不太懂,请您指教一下!
&H804我也不知是什么具体含义。好像 sData = StrConv(bTemp, vbUnicode, &H804)或 sData = StrConv(bTemp, vbUnicode)都行,不过一般都用第一种,反正我公司这么用都正常。例如在窗体的textbox(txtCom2Send)中输入一堆16进制数(2个字母[/数字]一组,中间用空格或逗号分隔),然后点发送按钮,代码示例如下: Dim bSucceed As Boolean Dim bytSend() As Byte '十六进制发送 bSucceed = funHexToString(txtCom2Send.Text, bytSend())Public Function funHexToString(strHex As String, bytResult() As Byte) As Boolean Dim i As Integer Dim bufHex As String Dim iLen As Integer, iLength As Integer Dim byteTemp As Byte Dim lStr As String, hStr As String Dim iHightHex As Integer, iLowHex As Integer Dim hightAsc As Integer, lowAsc As Integer Dim iHexData As Integer Dim iByt As Integer funHexToString = False iByt = 0 bufHex = Trim(strHex) iLen = Len(bufHex) If iLen = 0 Then Exit Function
For i = 0 To iLen - 1 iLength = Len(bufHex) byteTemp = Asc(Left(bufHex, 1)) '不符合: (<0 or >9) and (<a or >f) 'vbBinaryCompare If ((byteTemp < 48 Or byteTemp > 57) And _ (byteTemp < 97 Or byteTemp > 102) And _ (byteTemp < 65 Or byteTemp > 70)) Then bufHex = Right(bufHex, iLength - 1) Else If iLength > 1 Then iHightHex = funCharToHex(byteTemp) '高位 byteTemp = Asc(Mid(bufHex, 2, 1)) '符合: i = i + 1 If ((byteTemp > 48 And byteTemp < 57) Or _ (byteTemp > 97 And byteTemp < 102) Or _ (byteTemp > 65 And byteTemp < 70)) Then
iLowHex = funCharToHex(byteTemp) '低位 iHexData = iHightHex * 16 + iLowHex If UBound(bytResult) < iByt Then 'Preserve :使现有元素的值不丢失! ReDim Preserve bytResult(UBound(bytResult) + 1) End If bytResult(iByt) = iHexData iByt = iByt + 1 funHexToString = True '本次调用funHexToString()进行发送 Else '回退一个值(因为无法凑成双字节进行发送!) If UBound(bytResult) > 0 Then ReDim Preserve bytResult(UBound(bytResult) - 1) End If End If bufHex = Right(bufHex, iLength - 2) 'funHexToString = True End If
End If Next i
End FunctionPublic Function funCharToHex(b1 As Byte) As Integer If (b1 >= 48 And b1 <= 57) Then funCharToHex = CInt(Chr(b1)) ElseIf (b1 >= 97 And b1 <= 102) Then funCharToHex = b1 - 97 + 10 ElseIf (b1 >= 65 And b1 <= 70) Then funCharToHex = b1 - 65 + 10 End If End Function
dim bTemp() As Byte
dim sData as String
'接收数据到bTemp中 .....
'然后:
sData = StrConv(bTemp, vbUnicode, &H804)二、字符串转换为字节数组
bTemp= StrConv(sData , vbFromUnicode)
不过对那个&H804,我还不是很清楚,MSDN上面写的我也看不太懂,请您指教一下!
sData = StrConv(bTemp, vbUnicode, &H804)或
sData = StrConv(bTemp, vbUnicode)都行,不过一般都用第一种,反正我公司这么用都正常。例如在窗体的textbox(txtCom2Send)中输入一堆16进制数(2个字母[/数字]一组,中间用空格或逗号分隔),然后点发送按钮,代码示例如下:
Dim bSucceed As Boolean
Dim bytSend() As Byte
'十六进制发送
bSucceed = funHexToString(txtCom2Send.Text, bytSend())Public Function funHexToString(strHex As String, bytResult() As Byte) As Boolean
Dim i As Integer
Dim bufHex As String
Dim iLen As Integer, iLength As Integer
Dim byteTemp As Byte
Dim lStr As String, hStr As String
Dim iHightHex As Integer, iLowHex As Integer
Dim hightAsc As Integer, lowAsc As Integer
Dim iHexData As Integer
Dim iByt As Integer
funHexToString = False
iByt = 0
bufHex = Trim(strHex)
iLen = Len(bufHex)
If iLen = 0 Then Exit Function
For i = 0 To iLen - 1
iLength = Len(bufHex)
byteTemp = Asc(Left(bufHex, 1))
'不符合: (<0 or >9) and (<a or >f) 'vbBinaryCompare
If ((byteTemp < 48 Or byteTemp > 57) And _
(byteTemp < 97 Or byteTemp > 102) And _
(byteTemp < 65 Or byteTemp > 70)) Then
bufHex = Right(bufHex, iLength - 1)
Else
If iLength > 1 Then
iHightHex = funCharToHex(byteTemp) '高位
byteTemp = Asc(Mid(bufHex, 2, 1))
'符合:
i = i + 1
If ((byteTemp > 48 And byteTemp < 57) Or _
(byteTemp > 97 And byteTemp < 102) Or _
(byteTemp > 65 And byteTemp < 70)) Then
iLowHex = funCharToHex(byteTemp) '低位
iHexData = iHightHex * 16 + iLowHex
If UBound(bytResult) < iByt Then
'Preserve :使现有元素的值不丢失!
ReDim Preserve bytResult(UBound(bytResult) + 1)
End If
bytResult(iByt) = iHexData
iByt = iByt + 1
funHexToString = True '本次调用funHexToString()进行发送
Else
'回退一个值(因为无法凑成双字节进行发送!)
If UBound(bytResult) > 0 Then
ReDim Preserve bytResult(UBound(bytResult) - 1)
End If
End If
bufHex = Right(bufHex, iLength - 2)
'funHexToString = True
End If
End If
Next i
End FunctionPublic Function funCharToHex(b1 As Byte) As Integer
If (b1 >= 48 And b1 <= 57) Then
funCharToHex = CInt(Chr(b1))
ElseIf (b1 >= 97 And b1 <= 102) Then
funCharToHex = b1 - 97 + 10
ElseIf (b1 >= 65 And b1 <= 70) Then
funCharToHex = b1 - 65 + 10
End If
End Function