Nat*_*man 14 conversion microsoft-excel hexadecimal
我有一个包含此值的单元格:
0x00006cd2c0306953
Run Code Online (Sandbox Code Playgroud)
我想把它转换成一个数字。
我试过:
=HEX2DEC(C8)
Run Code Online (Sandbox Code Playgroud)
C8
包含我的十六进制值的单元格在哪里。
我收到 #NUM 错误。
我究竟做错了什么?
小智 7
你可以简单地使用:
HEX2DEC(right(A1,(len(A1)-2)))
Run Code Online (Sandbox Code Playgroud)
len(A1)
给你0x
字符串的长度。排除 的长度0x
,剩下的字符串是十六进制数。使用 Excel 函数获取 dec。
小智 6
正如 TwiterZX 所指出的,Hex2Dec
的输入限制为 10 个字符,并且6cd2c0306953
是 12 个字符。所以这行不通,但让我们为此推出我们自己的功能。使用VBA,添加一个Module,使用如下代码(可能需要根据自己的需要进行调整)
' 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
Run Code Online (Sandbox Code Playgroud)
在 Excel 中,假设单元格 A1 包含0x00006cd2c0306953
,A2 的公式=HexadecimalToDecimal(A1)
将导致1.19652E+14
. 将列格式化为小数点为零的数字,结果将为119652423330131
.
小智 5
HEX2DEC 限制为 10 个字符,但这并不意味着我们不能使用它。只需使用它几次,一次转换 10 个字符,并在每次使用时应用适当的 2 的幂。
= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)
Run Code Online (Sandbox Code Playgroud)
[免责声明:目前未经测试]
稍后:我现在正在使用电子表格,准备进行测试。将 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)
Run Code Online (Sandbox Code Playgroud)
然而,只有当 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)
Run Code Online (Sandbox Code Playgroud)
呃。
小智 2
在不使用函数的情况下执行此转换的一种肮脏方法(请参阅此Excel 论坛线程)是使用此公式来计算字符串中每个字符的值,然后将它们相加。这显然涉及使用临时单元来分解数字:
=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)
Run Code Online (Sandbox Code Playgroud)
假设您将这些临时单元格放在第 1 行到第 16 行上,其工作原理是从右侧开始提取每个字符,将其转换为值,然后应用 16 的相关幂。将所有 16 个单元格相加以获得您的值。
归档时间: |
|
查看次数: |
73389 次 |
最近记录: |