vba - 7 字节十六进制到十进制转换
问题描述
我需要将 Excel 列中的 7 字节十六进制值转换为相邻列中的十进制等效值。
我有超过 2000 个唯一值可以从十六进制转换为十进制。
我尽可能使用 Excel 的 hex2bin 和 bin2dec 公式。
我发现 Excel 正在四舍五入最不重要的 4 位小数。
示例:
7Byte Hex:0x803277323A8904
Excel 输出:36084284544158000
正确的十进制数:36084284544157956
解决方案
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开始我的输入字符串
推荐阅读
- c# - 选中的复选框不会更改转发器页脚模板中的数据
- java - 列不能为 Null
- python - python的Kolmogorov测试
- azure - Azure Cosmos DB - 使用附加字段更新现有文档
- java - gwt 应用程序未使用 appcfg 部署到谷歌应用引擎
- palantir-foundry - 在对象资源管理器或 Slate 的 iframe 中嵌入轮廓板
- vba - 检查字符串是否仅包含表中的字符串
- c++ - C++ 实例变量默认初始化
- elasticsearch - 弹性搜索查询字符串搜索 api 问题
- amazon-s3 - 如何使用 SNS 将一个 lambda 函数的响应返回给另一个