web-dev-qa-db-fra.com

Comment puis-je convertir un nombre hexadécimal en un nombre décimal dans Excel?

J'ai une cellule contenant cette valeur:

0x00006cd2c0306953

et je veux le convertir en nombre.

J'ai essayé:

=HEX2DEC(C8)

C8 est la cellule contenant ma valeur hexadécimale.

Je reçois une erreur #NUM.

Qu'est-ce que je fais mal?

11
Nathan Fellman

Vous pouvez simplement utiliser:

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

len(A1) vous donne la longueur de 0x string. Excluez la longueur de 0x, la chaîne restante est le nombre hexadécimal. Utilisez la fonction Excel pour obtenir le dec.

4
vegeta

Comme TwiterZX l'a indiqué, la valeur de Hex2Dec est limitée à 10 caractères et celle de 6cd2c0306953 est de 12 caractères. Donc, cela ne fonctionnera pas, mais mettons notre propre fonction pour cela. À l'aide de VBA, ajoutez un module et utilisez le code suivant (il peut être nécessaire de l'ajuster en fonction de vos besoins)

' 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

Dans Excel, supposons que la cellule A1 contienne 0x00006cd2c0306953, la formule de A2 de =HexadecimalToDecimal(A1) donnera 1.19652E+14. Formatez la colonne en un nombre avec zéro décimale et le résultat sera 119652423330131.

4
zedfoxus

HEX2DEC est limité à 10 caractères, mais cela ne signifie pas que nous ne pouvons pas l'utiliser. Utilisez-le simplement plusieurs fois pour convertir 10 caractères à la fois et appliquez la puissance appropriée de 2 à chaque utilisation.

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

[Disclaimer: Non testé pour le moment]

Plus tard: je suis maintenant à un tableur, prêt à tester. Changez le 3,5 en MID en 3,6. Hmm .. Toujours pas raison.

Il s'avère que HEX2DEC travaille sur des valeurs hexadéchages signées, de sorte que le premier terme finit par être négatif. Je ne sais pas pourquoi, mais voici la version corrigée qui ajoute 2 ^ 40 (ou 16 ^ 10, car nous travaillons en hex) pour corriger:

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

Cependant, cela ne fonctionne que si le DROIT (C8,10) est négatif. Voici ma solution générale:

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

Ugggh.

3
Bill Nace

Essayez ce qui suit:

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

Une façon sale d’exécuter cette conversion, sans utiliser de fonction (voir this fil de discussion Excel pour cela), consiste à utiliser cette formule pour calculer la valeur de chaque caractère de la chaîne, puis les additionner. Cela implique évidemment l'utilisation de cellules temporaires pour décomposer le nombre:

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

En supposant que vous placiez ces cellules temporaires sur les lignes 1 à 16, cela fonctionne en extrayant chaque caractère, en commençant par la droite, en le convertissant en une valeur, puis en appliquant la puissance appropriée de 16. Résumez les 16 cellules afin d'obtenir votre valeur.

2
Dominique Jacquel

Assurez-vous que votre colonne qui a des nombres HEX n'a ​​pas 0x. Le numéro HEX devrait être C8, pas 0xC8. J'espère que ça aide.

0
user2794645

HEX2DEC échoue s'il existe des caractères non-hexa (ABCDEF0123456789) de début ou de fin. Les espaces sont une véritable mine terrestre car ils ne sont pas visibles. Les nombres hexadécimaux, représentés par des chaînes, dans les fichiers journaux contiennent souvent des espaces de début et/ou de fin. Je trouve que "= HEX2DEC (TRIM (A1)) résoudra généralement ce problème. Cependant, quelque chose comme" = HEX2DEC (RIGHT (TRIM (A1), 10)) peut être nécessaire en raison de la limitation de 10 caractères de HEX2DEC.

0