如何在 Excel 中将十六进制数转换为十进制数?

如何在 Excel 中将十六进制数转换为十进制数?

我有一个包含此值的单元格:

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 个单元格相加以获得您的值。

相关内容