Tengo una celda que contiene este valor:
0x00006cd2c0306953
y quiero convertirlo en un número.
Lo intenté:
=HEX2DEC(C8)
¿Dónde C8
está la celda que contiene mi valor hexadecimal?
Me sale un error # NUM.
¿Qué estoy haciendo mal?
Tengo una celda que contiene este valor:
0x00006cd2c0306953
y quiero convertirlo en un número.
Lo intenté:
=HEX2DEC(C8)
¿Dónde C8
está la celda que contiene mi valor hexadecimal?
Me sale un error # NUM.
¿Qué estoy haciendo mal?
Respuestas:
Simplemente podrías usar:
HEX2DEC(right(A1,(len(A1)-2)))
len(A1)
te da la longitud de la 0x
cuerda. Excluya la longitud de 0x
, la cadena restante es el número hexadecimal. Use la función de Excel para obtener el dec.
HEX2DEC
acepta un máximo de diez dígitos hexadecimales. La cadena en la pregunta 0x00006cd2c0306953
, tiene 18 caracteres de longitud. Su solución evalúa RIGHT(A1,(LEN(A1)-2))
; 18−2 es 16, por lo que RIGHT(…)
devuelve 00006cd2c0306953
, que tiene 16 dígitos de largo. Incluso si quita los ceros a la izquierda, tiene 12 dígitos, que todavía son demasiados. Si puede hacer que esto funcione, describa su configuración. (Es decir, ¿qué versión de Excel está usando? ¿Y hizo algo complicado para que esto funcione?)
Como indicó TwiterZX, Hex2Dec
la entrada está limitada a 10 caracteres y 6cd2c0306953
tiene 12 caracteres. Entonces eso no funcionará, pero desarrollemos nuestra propia función para eso. Usando VBA, agregue un Módulo y use el siguiente código (puede necesitar ser ajustado según sus necesidades)
' 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
En Excel, digamos que la celda A1 contiene 0x00006cd2c0306953
, la fórmula de A2 =HexadecimalToDecimal(A1)
dará como resultado 1.19652E+14
. Formatee la columna a un número con decimales cero y el resultado será 119652423330131
.
HEX2DEC está limitado a 10 caracteres, pero eso no significa que no podamos usarlo. Simplemente utilícelo varias veces, para convertir 10 caracteres a la vez y aplique la potencia apropiada de 2 a cada uso.
= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)
[Descargo de responsabilidad: no probado en este momento]
Más tarde: ahora estoy en una hoja de cálculo, lista para probar. Cambia el 3,5 en MID a 3,6. Hmm .. Todavía no está bien.
Resulta que HEX2DEC está trabajando en valores hexadecimales firmados, por lo que el primer término termina siendo negativo. No estoy seguro de por qué, pero aquí está la versión fija que agrega 2 ^ 40 (o 16 ^ 10, ya que estamos trabajando en hexadecimal) para corregir:
= HEX2DEC(RIGHT(C8,10))+POWER(16,10) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Sin embargo, eso solo funciona si el DERECHO (C8,10) resulta ser negativo. Aquí está mi solución general:
= HEX2DEC(RIGHT(C8,10))+IF(HEX2DEC(RIGHT(C8,10))<0,POWER(16,10),0) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Ugggh
Una forma sucia de realizar esta conversión, sin usar una función (vea este hilo del foro de Excel para eso) es usar esta fórmula para calcular el valor de cada carácter en la cadena, luego sumarlos. Obviamente, esto implica el uso de celdas temporales para descomponer el número:
=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)
Suponiendo que coloque estas celdas temporales en las filas 1 a 16, esto funciona mediante la extracción de cada carácter, comenzando desde la derecha, convirtiéndolo en un valor, luego aplicando la potencia relevante de 16. Sume las 16 celdas para obtener su valor.
16^(ROW() - 1)
es mucho más limpio y fácil de leer quePOWER()
Asegúrese de que su columna que tiene números HEX no tenga 0x. El número HEX debe ser C8, no 0xC8. Espero eso ayude.
HEX2DEC falla si hay caracteres iniciales o finales no hexadecimales (ABCDEF0123456789). Los espacios son una verdadera mina terrestre porque no son visibles. A menudo, los números hexadecimales, representados como cadenas, en los archivos de registro contienen espacios iniciales y / o finales. Creo que "= HEX2DEC (TRIM (A1)) generalmente solucionará este problema. Sin embargo, algo como" = HEX2DEC (RIGHT (TRIM (A1), 10), puede ser necesario debido a la limitación de 10 caracteres de HEX2DEC.
Esta función ha cambiado, intente usar
=HEXDEC(C8)
así que sin el número 2 entre HEX y DEC
,
o ;
aquí