使用VB.NET 2015将长HEX字符串转换为HEX字节数组

时间:2018-08-19 06:15:47

标签: vb.net

如何使用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

1 个答案:

答案 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