Wie kann ich eine Hexadezimalzahl in Excel in eine Dezimalzahl umwandeln?

11

Ich habe eine Zelle mit diesem Wert:

0x00006cd2c0306953

und ich möchte es in eine Zahl umwandeln.

Ich habe es versucht:

=HEX2DEC(C8)

Wo C8ist die Zelle, die meinen Hex-Wert enthält?

Ich erhalte einen # NUM-Fehler.

Was mache ich falsch?

Nathan Fellman
quelle
Laut mir ist C kein Kapital, es kann klein sein.
Also
7
@ Sandy8086: Excel kümmert sich nicht um den Fall der Zellenunabhängigkeit
Nathan Fellman

Antworten:

5

Sie könnten einfach verwenden:

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

len(A1)gibt Ihnen die Länge der 0xZeichenfolge. 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.

vegeta
quelle
Hast du das versucht? Hast du etwas auf dieser Seite gelesen? Es wurde dreimal angegeben, dass HEX2DECmaximal zehn hexadezimale Ziffern akzeptiert werden. Die Zeichenfolge in der Frage 0x00006cd2c0306953ist 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?)
Scott
4

Wie von TwiterZX angegeben, ist Hex2Decdie Eingabe auf 10 Zeichen und 6cd2c030695312 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.

Zedfoxus
quelle
3

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.

Bill Nace
quelle
1
Nur das 40. Bit ist das Vorzeichenbit. Sie können den 64-Bit-Wert also einfach in zwei 32-Bit-Werte aufteilen und er ist immer positiv. Andernfalls
füllen
2

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.

Dominique Jacquel
quelle
1
IMHO 16^(ROW() - 1)ist viel sauberer und leichter zu lesen alsPOWER()
phuclv
2

Versuche Folgendes:

=HEX2DEC(RIGHT(D93;8))+HEX2DEC(LEFT(D93;LEN(D93)-8))*POWER(2;32)
Stas
quelle
warum nicht verwenden 2^32?
Phuclv
0

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.

user2794645
quelle
0

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.

George H. Barbehenn
quelle
-2

Diese Funktion hat sich bei Verwendung geändert

=HEXDEC(C8)

also ohne Nummer 2 zwischen HEX & DEC

Riad Krim
quelle
1
Das funktioniert überhaupt nicht
Nathan Fellman
Ich denke, diese Funktion ist sprachabhängig. Was ist die Hauptsprache Ihrer Excel-App und Ihre Version?
Riad Krim
Büro 2010 in Englisch
Nathan Fellman
4
Die HEX2DEC- (oder HEXDEC-) Funktion ist auf 40 Bit (10 Zeichen) begrenzt, und Ihre Nummer besteht aus 12 Zeichen. Office.microsoft.com/en-us/excel-help/…
Riad Krim
Wie hängt diese Sprache ab? Es gibt nicht einmal einen Funktionstrenner wie ,oder ;hier
phuclv