如何使用VB.Net将长十六进制字符串值转换为十六进制字节数组。考虑如果我有01 H3 HB HD3 H0 HA H36 H10
个十六进制长字符串,我想将其转换为&H1, &H3, &HB, &HD3, &H0, &HA, &H36, &H10
。
然后我可以Dim bytes1() As Byte =
到十六进制字节数组。
我尝试了以下代码,但无法正常工作。
Private Function HexStringToBytes(ByVal input As String) As Byte()
input = input.Trim().ToUpper()
input = input.Replace("&H", "")
input = input.Replace(" ", "")
Dim byteStrings() As String = input.Split(New Char() {","c})
If (byteStrings.Length > 0) Then
Dim retVal() As Byte = CType(Array.CreateInstance(GetType(Byte), byteStrings.Length), Byte())
Dim idx As Integer = 0
For Each byteString As String In byteStrings
retVal(idx) = Convert.ToByte(byteString, 16)
idx += 1
Next
Return retVal
End If
Return New Byte() {}
End Function
答案 0 :(得分:0)
您快到了,但是有两件事需要更正。首先,您删除字符串中的空格,使每个数字之间的分隔变得更加困难:
input = input.Replace(" ", "")
其次,您用逗号(,
)分隔,但是字符串没有任何逗号,因此它实际上没有任何作用:
Dim byteStrings() As String = input.Split(New Char() {","c})
解决方案非常简单:删除input = input.Replace(" ", "")
行并用空格分隔:
Dim byteStrings() As String = input.Split(New Char() {" "c}, StringSplitOptions.RemoveEmptyEntries)
StringSplitOptions.RemoveEmptyEntries
确保数组中没有空字符串。
最后,建议您更换:
Dim retVal() As Byte = CType(Array.CreateInstance(GetType(Byte), byteStrings.Length), Byte())
使用以下任一方法:
Dim retVal() As Byte = New Byte(byteStrings.Length - 1) {}
或:
Dim retVal(byteStrings.Length - 1) As Byte