【问题标题】:How convert Hex String into Byte Array in VB6如何在VB6中将十六进制字符串转换为字节数组
【发布时间】:2015-05-02 03:41:19
【问题描述】:

我有以下字节数组。

Dim Template(1023) As Byte

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

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

然后我将字节数组转换为十六进制字符串,如下所示(查看附图):

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 如何将十六进制字符串再次转换为字节数组?

谢谢!!

【问题讨论】:

    标签: arrays string vb6 hex


    【解决方案1】:

    重复:

    Convert hex value to a decimal value in VB6

    来自安德烈·拉斯洛:

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

    【讨论】:

      【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-14
        • 2017-08-23
        • 2015-09-21
        • 1970-01-01
        • 2021-10-31
        • 2019-02-12
        相关资源
        最近更新 更多