Ich habe eine Zelle mit diesem Wert:
0x00006cd2c0306953
und ich möchte es in eine Zahl umwandeln.
Ich habe es versucht:
=HEX2DEC(C8)
Wo C8
ist die Zelle, die meinen Hex-Wert enthält?
Ich erhalte einen # NUM-Fehler.
Was mache ich falsch?
Ich habe eine Zelle mit diesem Wert:
0x00006cd2c0306953
und ich möchte es in eine Zahl umwandeln.
Ich habe es versucht:
=HEX2DEC(C8)
Wo C8
ist die Zelle, die meinen Hex-Wert enthält?
Ich erhalte einen # NUM-Fehler.
Was mache ich falsch?
Antworten:
Sie könnten einfach verwenden:
HEX2DEC(right(A1,(len(A1)-2)))
len(A1)
gibt Ihnen die Länge der 0x
Zeichenfolge. Schließen Sie die Länge von aus 0x
, die verbleibende Zeichenfolge ist die Hex-Zahl. Verwenden Sie die Excel-Funktion, um die Dez. zu erhalten.
HEX2DEC
maximal zehn hexadezimale Ziffern akzeptiert werden. Die Zeichenfolge in der Frage 0x00006cd2c0306953
ist 18 Zeichen lang. Ihre Lösung bewertet RIGHT(A1,(LEN(A1)-2))
; 18−2 ist 16, RIGHT(…)
kehrt also zurück 00006cd2c0306953
, was 16 Stellen lang ist. Selbst wenn Sie die führenden Nullen entfernen, haben Sie 12 Ziffern, was immer noch zu viele sind. Wenn Sie dies zum Laufen bringen können, beschreiben Sie bitte Ihre Konfiguration. (Dh, welche Version von Excel verwenden Sie? Und haben Sie etwas Schwieriges getan, um dies zum Laufen zu bringen?)
Wie von TwiterZX angegeben, ist Hex2Dec
die Eingabe auf 10 Zeichen und 6cd2c0306953
12 Zeichen begrenzt. Das wird also nicht funktionieren, aber lassen Sie uns dafür unsere eigene Funktion rollen. Fügen Sie mit VBA ein Modul hinzu und verwenden Sie den folgenden Code (muss möglicherweise an Ihre Bedürfnisse angepasst werden).
' 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, sagen wir mal , die Zelle A1 enthält 0x00006cd2c0306953
, Formel des A2 =HexadecimalToDecimal(A1)
ergeben wird 1.19652E+14
. Formatieren Sie die Spalte auf eine Zahl mit null Dezimalstellen, und das Ergebnis ist 119652423330131
.
HEX2DEC ist auf 10 Zeichen begrenzt, aber das bedeutet nicht, dass wir es nicht verwenden können. Verwenden Sie es einfach mehrmals, um 10 Zeichen gleichzeitig zu konvertieren und die entsprechende Potenz von 2 auf jede Verwendung anzuwenden.
= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)
[Haftungsausschluss: Im Moment noch nicht getestet]
Später: Ich bin jetzt in einer Tabelle und bereit zum Testen. Ändern Sie die 3,5 in MID auf 3,6. Hmm .. Immer noch nicht richtig.
Es stellt sich heraus, dass der HEX2DEC an vorzeichenbehafteten Hex-Werten arbeitet, sodass der erste Term negativ ist. Ich weiß nicht warum, aber hier ist die feste Version, die 2 ^ 40 (oder 16 ^ 10, da wir in Hex arbeiten) hinzufügt, um Folgendes zu beheben:
= HEX2DEC(RIGHT(C8,10))+POWER(16,10) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Dies funktioniert jedoch nur, wenn RECHTS (C8,10) negativ ist. Hier ist meine allgemeine Lösung:
= HEX2DEC(RIGHT(C8,10))+IF(HEX2DEC(RIGHT(C8,10))<0,POWER(16,10),0) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Ugggh.
Eine schmutzige Möglichkeit, diese Konvertierung ohne Verwendung einer Funktion durchzuführen (siehe dazu diesen Excel-Forenthread ), besteht darin, mit dieser Formel den Wert jedes Zeichens in der Zeichenfolge zu berechnen und diese dann zusammenzufassen. Dies beinhaltet offensichtlich die Verwendung temporärer Zellen, um die Zahl zu zerlegen:
=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)
Angenommen, Sie platzieren diese temporären Zellen in den Zeilen 1 bis 16, extrahieren Sie jedes Zeichen von rechts, konvertieren es in einen Wert und wenden dann die entsprechende Potenz von 16 an. Summieren Sie alle 16 Zellen, um Ihren Wert zu erhalten.
16^(ROW() - 1)
ist viel sauberer und leichter zu lesen alsPOWER()
Stellen Sie sicher, dass Ihre Spalte mit HEX-Nummern nicht 0x enthält. Die HEX-Nummer sollte C8 sein, nicht 0xC8. Ich hoffe es hilft.
HEX2DEC schlägt fehl, wenn führende oder nachfolgende nicht hexadezimale Zeichen (ABCDEF0123456789) vorhanden sind. Räume sind eine echte Landmine, weil sie nicht sichtbar sind. Häufig enthalten Hex-Zahlen, die als Zeichenfolgen dargestellt werden, in Protokolldateien führende und / oder nachfolgende Leerzeichen. Ich finde, dass "= HEX2DEC (TRIM (A1)) normalerweise dieses Problem behebt. Allerdings kann etwas wie" = HEX2DEC (RECHTS (TRIM (A1), 10)) aufgrund der 10-Zeichen-Beschränkung von HEX2DEC erforderlich sein.
Diese Funktion hat sich bei Verwendung geändert
=HEXDEC(C8)
also ohne Nummer 2 zwischen HEX & DEC
,
oder ;
hier