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


11

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

0x00006cd2c0306953

我想将其转换为数字。

我试过了:

=HEX2DEC(C8)

C8包含我的十六进制值的单元格在哪里?

我收到一个#NUM错误。

我究竟做错了什么?


根据我的说法,C不是资本,可能很小。因此,请尝试使用“ c8”
Sandy8086'9

7
@ Sandy8086:Excel不在乎单元格的大小写
Nathan Fellman 2012年

Answers:


5

您可以简单地使用:

HEX2DEC(right(A1,(len(A1)-2)))

len(A1)给你0x字符串的长度。排除的长度0x,剩下的字符串是十六进制数字。使用Excel函数获取dec。


你有尝试过吗?您在此页面上阅读过任何内容吗?已有三次声明,HEX2DEC最多接受十个十六进制数字。问题中的字符串0x00006cd2c0306953长18个字符。您的解决方案评估RIGHT(A1,(LEN(A1)-2));18-2是16,所以RIGHT(…)返回00006cd2c0306953,这是16个数字长。即使您去除前导零,您也有12位数字,这仍然太多了。如果您可以使用它,请描述您的配置。(即,您使用的是哪个版本的Excel?您是否做了任何棘手的操作才能使其正常工作?)
Scott

4

如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)

哎呀


1
只有第40位是符号位,因此您可以将64位值拆分为两个32位值,并且它始终为正。否则,如果零位少于37位
则将

2

在不使用函数的情况下执行此转换的一种肮脏方法(请参见此excel论坛线程)是使用此公式计算字符串中每个字符的值,然后将它们求和。显然,这涉及使用临时单元格分解数字:

=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)

假设您将这些临时单元格放在第1到16行,这是通过从右开始提取每个字符,将其转换为值,然后应用16的相关幂来进行工作的。将所有16个单元格加起来以获得值。


1
IMHO 16^(ROW() - 1)POWER()
phuclv

2

请尝试以下操作:

=HEX2DEC(RIGHT(D93;8))+HEX2DEC(LEFT(D93;LEN(D93)-8))*POWER(2;32)

为什么不使用2^32
phuclv

0

确保您的具有十六进制数字的列没有0x。十六进制数应为C8,而不是0xC8。希望能帮助到你。


0

如果有任何前导或尾随非十六进制(ABCDEF0123456789)字符,则HEX2DEC失败。空间是真正的地雷,因为它们不可见。日志文件中的十六进制数字(通常以字符串表示)包含前导和/或尾随空格。我发现“ = HEX2DEC(TRIM(A1))通常可以解决此问题。但是,由于HEX2DEC的10个字符限制,可能需要类似” = HEX2DEC(RIGHT(TRIM(A1),10)]之类的东西。


-2

此功能已更改,请尝试使用

=HEXDEC(C8)

所以十六进制和DEC之间没有2


1
这根本不起作用
Nathan Fellman 2012年

我认为此功能取决于语言,excel应用程序的主要语言是什么,以及您的版本是什么。
Riad Krim

Office 2010英语
Nathan Fellman

4
HEX2DEC(或HEXDEC)功能限制为40位(10个字符),而您的数字为12个字符 office.microsoft.com/zh-cn/excel-help/…–
Riad Krim

这种语言如何依赖?还有的甚至没有像功能分离器,;在这里
phuclv
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.