Ho una cella contenente questo valore:
0x00006cd2c0306953
e voglio convertirlo in un numero.
Provai:
=HEX2DEC(C8)
dov'è C8
la cella che contiene il mio valore esadecimale.
Ottengo un errore #NUM.
Che cosa sto facendo di sbagliato?
Ho una cella contenente questo valore:
0x00006cd2c0306953
e voglio convertirlo in un numero.
Provai:
=HEX2DEC(C8)
dov'è C8
la cella che contiene il mio valore esadecimale.
Ottengo un errore #NUM.
Che cosa sto facendo di sbagliato?
Risposte:
Puoi semplicemente usare:
HEX2DEC(right(A1,(len(A1)-2)))
len(A1)
ti dà la lunghezza della 0x
stringa. Escludere la lunghezza di 0x
, la stringa rimanente è il numero esadecimale. Utilizzare la funzione Excel per ottenere il dec.
HEX2DEC
accetta un massimo di dieci cifre esadecimali. La stringa nella domanda ha una 0x00006cd2c0306953
lunghezza 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?)
Come indicato da TwiterZX, Hex2Dec
l'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
.
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.
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.
16^(ROW() - 1)
è molto più pulito e più facile da leggere diPOWER()
Assicurati che la tua colonna con numeri esadecimali non abbia 0x. Il numero esadecimale deve essere C8, non 0xC8. Spero che sia d'aiuto.
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.
Questa funzione è cambiata provare a usare
=HEXDEC(C8)
quindi senza il numero 2 tra HEX e DEC
,
o ;
qui