首页 > 解决方案 > 使用 VB.NET 2015 将长 HEX 字符串转换为 HEX 字节数组

问题描述

如何使用 VB.Net 将 Long HEX String 值转换为 HEX 字节数组。考虑如果我有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

标签: vb.net

解决方案


你快到了,但有两件事你需要纠正。首先,您删除字符串中的空格,从而更难分隔每个数字:

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

推荐阅读