Come posso convertire un numero esadecimale in un numero decimale in Excel?


11

Ho una cella contenente questo valore:

0x00006cd2c0306953

e voglio convertirlo in un numero.

Provai:

=HEX2DEC(C8)

dov'è C8la cella che contiene il mio valore esadecimale.

Ottengo un errore #NUM.

Che cosa sto facendo di sbagliato?


secondo me C non è capitale, può essere piccolo. quindi prova 'c8'
Sandy8086

7
@ Sandy8086: Excel non si preoccupa del caso degli indeti cellulari
Nathan Fellman,

Risposte:


5

Puoi semplicemente usare:

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

len(A1)ti dà la lunghezza della 0xstringa. Escludere la lunghezza di 0x, la stringa rimanente è il numero esadecimale. Utilizzare la funzione Excel per ottenere il dec.


Hai provato questo? Hai letto qualcosa in questa pagina? È stato dichiarato tre volte che HEX2DECaccetta un massimo di dieci cifre esadecimali. La stringa nella domanda ha una 0x00006cd2c0306953lunghezza di 18 caratteri. La tua soluzione valuta RIGHT(A1,(LEN(A1)-2)); 18 -2 è 16, quindi RIGHT(…)ritorna 00006cd2c0306953, che è lungo 16 cifre. Anche se si eliminano gli zeri iniziali, si hanno 12 cifre, che sono ancora troppe. Se riesci a farlo funzionare, descrivi la tua configurazione. (Cioè, quale versione di Excel stai usando? E hai fatto qualcosa di complicato per farlo funzionare?)
Scott

4

Come indicato da TwiterZX, Hex2Decl'input è limitato a 10 caratteri ed 6cd2c0306953è di 12 caratteri. Quindi non funzionerà, ma facciamo rotolare la nostra funzione per quello. Utilizzando VBA, aggiungi un modulo e utilizza il seguente codice (potrebbe essere necessario modificarlo in base alle tue esigenze)

' 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

In Excel, supponiamo che la cella A1 contenga 0x00006cd2c0306953, la formula di A2 =HexadecimalToDecimal(A1)comporterà 1.19652E+14. Formatta la colonna su un numero con zero decimali e il risultato sarà 119652423330131.


3

HEX2DEC è limitato a 10 caratteri, ma ciò non significa che non possiamo usarlo. Basta usarlo più volte, per convertire 10 caratteri alla volta e applicare la potenza appropriata di 2 per ogni utilizzo.

= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)

[Disclaimer: non testato al momento]

Più tardi: ora sono su un foglio di calcolo, pronto per il test. Cambia 3,5 in MID a 3,6. Hmm .. Ancora non è giusto.

Si scopre che HEX2DEC sta lavorando su valori esadecimali con segno, quindi il primo termine finisce per essere negativo. Non so perché, ma ecco la versione fissa che aggiunge 2 ^ 40 (o 16 ^ 10, mentre stiamo lavorando in esadecimale) per risolvere:

= HEX2DEC(RIGHT(C8,10))+POWER(16,10) + HEX2DEC(MID(C8,3,6))*POWER(16,10)

Tuttavia, ciò funziona solo se il DIRITTO (C8,10) sembra essere negativo. Ecco la mia soluzione generale:

= HEX2DEC(RIGHT(C8,10))+IF(HEX2DEC(RIGHT(C8,10))<0,POWER(16,10),0) + HEX2DEC(MID(C8,3,6))*POWER(16,10)

Ugggh.


1
Solo il 40 ° bit è il bit di segno, quindi puoi semplicemente dividere il valore a 64 bit in due valori a 32 bit e sarà sempre positivo. Altrimenti inserisce uno zero nella stringa esadecimale se è inferiore a 37 bit
phuclv

2

Un modo sporco per eseguire questa conversione, senza usare una funzione (vedi questo thread del forum Excel per quello) è usare questa formula per calcolare il valore di ciascun carattere nella stringa, quindi riassumere quelli. Ciò comporta ovviamente l'uso di celle temporanee per scomporre il numero:

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

Supponendo di posizionare queste celle temporanee nelle righe da 1 a 16, questo funziona estraendo ogni carattere, partendo da destra, convertendolo in un valore, quindi applicando il potere pertinente di 16. Riassumi tutte le 16 celle per ottenere il tuo valore.


1
IMHO 16^(ROW() - 1)è molto più pulito e più facile da leggere diPOWER()
phuclv

2

Prova quanto segue:

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

perché non usare 2^32?
phuclv,

0

Assicurati che la tua colonna con numeri esadecimali non abbia 0x. Il numero esadecimale deve essere C8, non 0xC8. Spero che sia d'aiuto.


0

HEX2DEC ha esito negativo se sono presenti caratteri non esadecimali iniziali o finali (ABCDEF0123456789). Gli spazi sono una vera mina terrestre perché non sono visibili. Spesso i numeri esadecimali, rappresentati come stringhe, nei file di registro contengono spazi iniziali e / o finali. Trovo che "= HEX2DEC (TRIM (A1)) risolva solitamente questo problema. Tuttavia, qualcosa come" = HEX2DEC (DESTRA (TRIM (A1), 10), potrebbe essere necessario a causa della limitazione di 10 caratteri di HEX2DEC.


-2

Questa funzione è cambiata provare a usare

=HEXDEC(C8)

quindi senza il numero 2 tra HEX e DEC


1
Questo non funziona affatto
Nathan Fellman,

Penso che questa funzione dipenda dalla lingua, qual è la lingua principale della tua app Excel e la tua versione ..?
Riad Krim,

Office 2010 in inglese
Nathan Fellman,

4
La funzione HEX2DEC (o HEXDEC) è limitata a 40 bit (10 caratteri) e il tuo numero è di 12 caratteri office.microsoft.com/en-us/excel-help/…
Riad Krim

In che modo dipende questa lingua? Non c'è nemmeno un separatore di funzioni come ,o ;qui
phuclv
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.