首页 > 解决方案 > 7 字节十六进制到十进制转换

问题描述

我需要将 Excel 列中的 7 字节十六进制值转换为相邻列中的十进制等效值。

我有超过 2000 个唯一值可以从十六进制转换为十进制。

我尽可能使用 Excel 的 hex2bin 和 bin2dec 公式。
我发现 Excel 正在四舍五入最不重要的 4 位小数。

示例:
7Byte Hex:0x803277323A8904
Excel 输出:36084284544158000
正确的十进制数:36084284544157956

标签: vbaexcelhex

解决方案


这是Rick Rothstein 代码的一个小变体

Function HexToDecs(ByVal HexString As String) As String
  Dim X As Integer
  Dim BinStr As String
  Const BinValues = "0000000100100011010001010110011110001001101010111100110111101111"
  If Left$(HexString, 2) Like "&[hH]" Then
    HexString = Mid$(HexString, 3)
  End If
  If Len(HexString) <= 23 Then
    For X = 1 To Len(HexString)
      BinStr = BinStr & Mid$(BinValues, 4 * Val("&h" & Mid$(HexString, X, 1)) + 1, 4)
    Next
    HexToDecd = CDec(0)
    For X = 0 To Len(BinStr) - 1
      HexToDecd = HexToDecd + Val(Mid(BinStr, Len(BinStr) - X, 1)) * 2 ^ X
    Next
  Else
    ' Number is too big, handle error here
  End If
  HexToDecs = CStr(HexToDecd)
End Function

在此处输入图像描述

笔记:

  • UDF()返回整数的字符串表示形式,以避免对真数值的 15 位限制。
  • 我选择不以0x开始我的输入字符串

推荐阅读