Vba 在Visual Basic for Applications(Excel)中将十六进制字符串转换为十进制字符串

Vba 在Visual Basic for Applications(Excel)中将十六进制字符串转换为十进制字符串,vba,hex,decimal,Vba,Hex,Decimal,我试图将十六进制字符串转换为十进制字符串,以输入Excel电子表格,但我没有找到任何解决问题的方法。我可以在Excel中成功显示十六进制字符串,但我想在将其推送到Excel电子表格之前将其转换为十进制字符串 我尝试了以下方法(另请参见当前注释掉的代码): 十六进制字符串通常如下所示:00A57 十进制字符串输出应该如下所示:2647 我收到语法错误或错误402,这取决于我试图使其工作。将代码的相应部分更改为: Dim intVal尽可能长 intVal=FromHex(hexVal) 此十六进制

我试图将十六进制字符串转换为十进制字符串,以输入Excel电子表格,但我没有找到任何解决问题的方法。我可以在Excel中成功显示十六进制字符串,但我想在将其推送到Excel电子表格之前将其转换为十进制字符串

我尝试了以下方法(另请参见当前注释掉的代码):

十六进制字符串通常如下所示:00A57 十进制字符串输出应该如下所示:2647


我收到语法错误或错误402,这取决于我试图使其工作。

将代码的相应部分更改为:

Dim intVal尽可能长
intVal=FromHex(hexVal)

此十六进制字符串存储在hexVal中,对吗?您的函数
ToHexString
在一个字符上编码一些字节,当它应该在2:
right(十六进制(256+缓冲区(i)),2)
。请注意,您可以使用
myint32=buffer(0)+buffer(1)*256+buffer(1)*1024+…
或使用
rtlmovemory(myint32,buffer(0),4)
直接读取数字,或者通过在一个文件中加载字节来读取数字。
Private Function ToHexString(ByRef buffer As Variant) As String
    ReDim bytes(LBound(buffer) + 6 To LBound(buffer) + 9)
    Dim i As Long
    For i = LBound(buffer) + 6 To LBound(buffer) + 9
        bytes(i) = Hex(buffer(i))
    Next
    ToHexString = Strings.Join(bytes, "")
End Function

Function FromHex(hexString As String) As Long
    FromHex = Val("&H" & hexString)
End Function

Private Sub StrokeReader1_CommEvent(ByVal Evt As StrokeReaderLib.Event, ByVal data As Variant)
  Select Case Evt
    Case EVT_DISCONNECT
        Debug.Print "Disconnected"

    Case EVT_CONNECT
        Debug.Print "Connected"

    Case EVT_DATA
        buf = StrokeReader1.Read(BINARY) 'Use BINARY to receive a byte array
        Debug.Print ToHexString(buf)
       ' Debug.Print buf
      '  Debug.Print "myStr length: " & Len(buf)
           'using `StrConv` to allow for 2-byte unicode character storage

       ' dist = Convert.ToInt32("c001", 16)



       ' ActiveSheet.Range("A1").Value = ToHexString(buf)
    ' int number = Convert.ToInt32(buf, 16);

        'buf = "0081C"

       ' Dim i As Integer = Convert.ToInt32("c001", 16)

       'hexDist = ToHexString(buf)
       'distInt As Integer = Convert.ToInt32(hexDist, 16)

        'decLong = FromHex(buf)

        Dim hexVal As String
        hexVal = ToHexString(buf)
        Dim intVal As Integer
        intVal = Convert.ToInt32(hexVal, 16)

        ActiveCell.Value = intVal
        ActiveCell.Offset(1, 0).Select




  End Select
End Sub