VB 如何将十六进制字符串转为同内容十六进制byte数组?
我想将文本框中输入的十六进制字符串转化为byte()类型,以便通过串口发送给单片机。举个例子,我在text1中输入内容“1A”,通过程序转换为byte型数组1A,然后通过...
我想将文本框中输入的十六进制字符串转化为byte()类型,以便通过串口发送给单片机。
举个例子,我在text1中输入内容“1A”,通过程序转换为byte型数组1A,然后通过串口发送出去。
text中输入最大十六进制字符串是“FFFF”,按照两个一组转换。假如输入的是"F",则转成0F;输入是"FF"转为FF;输入是"FFF"则转为0FFF。
程序是这样的:
dim a as string
dim b() asbyte
a=tex1.text
{插入将字符串转为数组的语句}
MSComm1.Output = b 展开
举个例子,我在text1中输入内容“1A”,通过程序转换为byte型数组1A,然后通过串口发送出去。
text中输入最大十六进制字符串是“FFFF”,按照两个一组转换。假如输入的是"F",则转成0F;输入是"FF"转为FF;输入是"FFF"则转为0FFF。
程序是这样的:
dim a as string
dim b() asbyte
a=tex1.text
{插入将字符串转为数组的语句}
MSComm1.Output = b 展开
展开全部
首先,建议你用空格把所有要发送的字符分隔开来,如果你想发一个“FF920C8549023572........a807a”,你知道是第一个字节应该发"0F"和还是"FF"呢?“F F9 20 C8...”这样就容易的多了。
以下是按你的要求写的程序,如果输入使用空格隔开,注释掉一句话即可。
Const sHexDef As String = "0123456789ABCDEF"
Dim sChr As String
Dim iHex As Long
Dim iLev As Long '记录当前是低位还是高位,0位换字节
Dim iVal As Long
Dim i As Long
Dim iIndex As Long
a = Text1.Text
iIndex = 0
a = Trim(a)
If Len(a) Mod 2 > 0 Then a = "0" & a '连续输入内容,例如"FFADFAE",需使用这句话,用以判断开头的“0F”问题;若使用“0F FF FA 03”之类的格式,需注释掉这行
a = a & " "
For i = 1 To Len(a)
sChr = VBA.Mid(a, i, 1)
iHex = InStr(sHexDef, sChr)
If iLev = 2 Or iHex = 0 Then
iLev = 0
ReDim Preserve b(iIndex)
b(iIndex) = iVal
iVal = 0
iIndex = iIndex + 1
End If
If iHex > 0 Then
iLev = iLev + 1
iVal = iVal * 16 + (iHex - 1)
End If
Next i
以下是按你的要求写的程序,如果输入使用空格隔开,注释掉一句话即可。
Const sHexDef As String = "0123456789ABCDEF"
Dim sChr As String
Dim iHex As Long
Dim iLev As Long '记录当前是低位还是高位,0位换字节
Dim iVal As Long
Dim i As Long
Dim iIndex As Long
a = Text1.Text
iIndex = 0
a = Trim(a)
If Len(a) Mod 2 > 0 Then a = "0" & a '连续输入内容,例如"FFADFAE",需使用这句话,用以判断开头的“0F”问题;若使用“0F FF FA 03”之类的格式,需注释掉这行
a = a & " "
For i = 1 To Len(a)
sChr = VBA.Mid(a, i, 1)
iHex = InStr(sHexDef, sChr)
If iLev = 2 Or iHex = 0 Then
iLev = 0
ReDim Preserve b(iIndex)
b(iIndex) = iVal
iVal = 0
iIndex = iIndex + 1
End If
If iHex > 0 Then
iLev = iLev + 1
iVal = iVal * 16 + (iHex - 1)
End If
Next i
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询