如何在VB6中将十六进制字符串转换为字节数组

时间:2015-03-01 20:37:48

标签: arrays string vb6 hex

我有以下字节数组。

Dim Template(1023) As Byte

然后我调用指纹扫描仪设备功能并返回以下内容:

Template(0) = 70
Template(1) = 77
Template(2) = 82
...
Template(1023) = 0

然后我将Bytes数组转换为字符串hex,如下所示(查看附加图像):

Dim n As Long, i As Long
ByteArrayToHexStr = Space$(3 * (UBound(Template) - LBound(Template)) + 2)
n = 1
For i = LBound(Template) To UBound(Template)
     Mid$(ByteArrayToHexStr, n, 2) = Right$("00" & Hex$(b(i)), 2)
    n = n + 3
Next

Byte Array converted into Hex String 如何将十六进制字符串再次转换为字节数组?

谢谢!

2 个答案:

答案 0 :(得分:2)

允许手动输入的花式版本:

Private Function BytesToHex(ByRef Bytes() As Byte) As String
    'Quick and dirty Byte array to hex String, format:
    '
    '   "HH HH HH"

    Dim LB As Long
    Dim ByteCount As Long
    Dim BytePos As Integer

    LB = LBound(Bytes)
    ByteCount = UBound(Bytes) - LB + 1
    If ByteCount < 1 Then Exit Function
    BytesToHex = Space$(3 * (ByteCount - 1) + 2)
    For BytePos = LB To UBound(Bytes)
        Mid$(BytesToHex, 3 * (BytePos - LB) + 1, 2) = _
            Right$("0" & Hex$(Bytes(BytePos)), 2)
    Next
End Function

Private Function HexToBytes(ByVal HexString As String) As Byte()
    'Quick and dirty hex String to Byte array.  Accepts:
    '
    '   "HH HH HH"
    '   "HHHHHH"
    '   "H HH H"
    '   "HH,HH,     HH" and so on.

    Dim Bytes() As Byte
    Dim HexPos As Integer
    Dim HexDigit As Integer
    Dim BytePos As Integer
    Dim Digits As Integer

    ReDim Bytes(Len(HexString) \ 2)  'Initial estimate.
    For HexPos = 1 To Len(HexString)
        HexDigit = InStr("0123456789ABCDEF", _
                         UCase$(Mid$(HexString, HexPos, 1))) - 1
        If HexDigit >= 0 Then
            If BytePos > UBound(Bytes) Then
                'Add some room, we'll add room for 4 more to decrease
                'how often we end up doing this expensive step:
                ReDim Preserve Bytes(UBound(Bytes) + 4)
            End If
            Bytes(BytePos) = Bytes(BytePos) * &H10 + HexDigit
            Digits = Digits + 1
        End If
        If Digits = 2 Or HexDigit < 0 Then
            If Digits > 0 Then BytePos = BytePos + 1
            Digits = 0
        End If
    Next
    If Digits = 0 Then BytePos = BytePos - 1
    If BytePos < 0 Then
        Bytes = "" 'Empty.
    Else
        ReDim Preserve Bytes(BytePos)
    End If
    HexToBytes = Bytes
End Function

答案 1 :(得分:0)

重复:

Convert hex value to a decimal value in VB6

来自Andre Laszlo:

Dim hexVal as String 
hexVal = "#7B19AB" 
Dim intVal as Integer 
intVal = Val("&H" & Replace(hexVal, "#", ""))