¿Cómo puedo convertir un número hexadecimal a un número decimal en Excel?

11

Tengo una celda que contiene este valor:

0x00006cd2c0306953

y quiero convertirlo en un número.

Lo intenté:

=HEX2DEC(C8)

¿Dónde C8está la celda que contiene mi valor hexadecimal?

Me sale un error # NUM.

¿Qué estoy haciendo mal?

Nathan Fellman
fuente
según mi opinión, C no es capital, puede ser pequeño. así que prueba 'c8'
Sandy8086
77
@ Sandy8086: Excel no se preocupa por el caso de la celda indeces
Nathan Fellman

Respuestas:

5

Simplemente podrías usar:

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

len(A1)te da la longitud de la 0xcuerda. Excluya la longitud de 0x, la cadena restante es el número hexadecimal. Use la función de Excel para obtener el dec.

vegeta
fuente
¿Has probado esto? ¿Has leído algo en esta página? Se ha declarado tres veces que HEX2DECacepta 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?)
Scott
4

Como indicó TwiterZX, Hex2Decla entrada está limitada a 10 caracteres y 6cd2c0306953tiene 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.

zedfoxus
fuente
3

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

Bill Nace
fuente
1
Solo el bit 40 es el bit de signo, por lo que puede dividir el valor de 64 bits en dos valores de 32 bits y siempre será positivo. De lo contrario, coloque un cero en la cadena hexadecimal si es más corta que 37 bits
phuclv
2

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.

Dominique Jacquel
fuente
1
En mi humilde opinión 16^(ROW() - 1)es mucho más limpio y fácil de leer quePOWER()
phuclv
2

Intenta lo siguiente:

=HEX2DEC(RIGHT(D93;8))+HEX2DEC(LEFT(D93;LEN(D93)-8))*POWER(2;32)
Stas
fuente
¿Por qué no usar 2^32?
phuclv
0

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.

usuario2794645
fuente
0

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.

George H. Barbehenn
fuente
-2

Esta función ha cambiado, intente usar

=HEXDEC(C8)

así que sin el número 2 entre HEX y DEC

Riad Krim
fuente
1
Esto no funciona en absoluto
Nathan Fellman
Creo que esta función depende del idioma, ¿cuál es el idioma principal de su aplicación de Excel y su versión ...?
Riad Krim
Office 2010 en inglés
Nathan Fellman
44
La función HEX2DEC (o HEXDEC) está limitada a 40 bits (10 caracteres), y su número es de 12 caracteres office.microsoft.com/en-us/excel-help/…
Riad Krim
¿Cómo depende este idioma? Ni siquiera hay un separador de funciones como ,o ;aquí
phuclv