我有一个包含此值的单元格:
0x00006cd2c0306953
我想把它转换成数字。
我试过:
=HEX2DEC(C8)
C8
包含我的十六进制值的单元格在哪里。
我收到 #NUM 错误。
我究竟做错了什么?
答案1
您可以简单地使用:
HEX2DEC(right(A1,(len(A1)-2)))
len(A1)
给出0x
字符串的长度。除去的长度0x
,剩下的字符串就是十六进制数。使用 Excel 函数获取十进制数。
答案2
正如 TwiterZX 所指出的,Hex2Dec
输入限制为 10 个字符,并且6cd2c0306953
是 12 个字符。所以这行不通,但让我们为此推出自己的功能。使用 VBA,添加一个模块并使用以下代码(可能需要根据您的需要进行调整)
' Force explicit declaration of variables
Option Explicit
' Convert hex to decimal
' In: Hex in string format
' Out: Double
Public Function HexadecimalToDecimal(HexValue As String) As Double
' If hex starts with 0x, replace it with &H to represent Hex that VBA will understand
Dim ModifiedHexValue As String
ModifiedHexValue = Replace(HexValue, "0x", "&H")
HexadecimalToDecimal = CDec(ModifiedHexValue)
End Function
在 Excel 中,假设单元格 A1 包含0x00006cd2c0306953
,A2 的公式=HexadecimalToDecimal(A1)
将导致1.19652E+14
。将列格式化为零小数的数字,结果将为119652423330131
。
答案3
HEX2DEC 限制为 10 个字符,但这并不意味着我们不能使用它。只需多次使用它,每次转换 10 个字符,并在每次使用时应用适当的 2 的幂。
= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)
[免责声明:目前尚未测试]
稍后:我现在在电子表格上,准备测试。将 MID 中的 3,5 更改为 3,6。嗯……还是不对。
事实证明,HEX2DEC 正在处理有符号的十六进制值,因此第一个项最终为负数。不知道为什么,但这里有一个修复版本,它添加了 2^40(或 16^10,因为我们在十六进制中工作)来修复:
= HEX2DEC(RIGHT(C8,10))+POWER(16,10) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
但是,只有当 RIGHT(C8,10) 恰好为负数时,这才有效。以下是我的一般解决方案:
= HEX2DEC(RIGHT(C8,10))+IF(HEX2DEC(RIGHT(C8,10))<0,POWER(16,10),0) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
呃呃。
答案4
执行此转换的一个肮脏的方法是不使用函数(参见excel 论坛主题方法是使用这个公式计算字符串中每个字符的值,然后将其相加。这显然需要使用临时单元格来分解数字:
=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)
假设您将这些临时单元格放在第 1 行至第 16 行,其工作原理是从右侧开始提取每个字符,将其转换为一个值,然后应用 16 的相关幂。将所有 16 个单元格相加以获得您的值。