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

11

J'ai une cellule contenant cette valeur:

0x00006cd2c0306953

et je veux le convertir en un nombre.

J'ai essayé:

=HEX2DEC(C8)

C8est la cellule contenant ma valeur hexadécimale.

J'obtiens une erreur #NUM.

Qu'est-ce que je fais mal?

Nathan Fellman
la source
selon moi C n'est pas du capital il peut être petit. alors essayez 'c8'
Sandy8086
7
@ Sandy8086: Excel ne se soucie pas du cas des indéces cellulaires
Nathan Fellman

Réponses:

5

Vous pouvez simplement utiliser:

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

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

Végéta
la source
Avez-vous essayé cela? Avez-vous lu quelque chose sur cette page? Il a été indiqué trois fois et HEX2DECaccepte un maximum de dix chiffres hexadécimaux. La chaîne dans la question 0x00006cd2c0306953, est de 18 caractères. Votre solution évalue RIGHT(A1,(LEN(A1)-2)); 18−2 est 16, donc RIGHT(…)retourne 00006cd2c0306953, qui est long de 16 chiffres. Même si vous supprimez les zéros de tête, vous avez 12 chiffres, ce qui est encore trop. Si vous pouvez le faire fonctionner, veuillez décrire votre configuration. (C'est-à-dire, quelle version d'Excel utilisez-vous? Et avez-vous fait quelque chose de délicat pour que cela fonctionne?)
Scott
4

Comme TwiterZX l'a indiqué, Hex2Decla saisie de est limitée à 10 caractères et à 6cd2c030695312 caractères. Donc ça ne marchera pas mais roulons notre propre fonction pour ça. À l'aide de VBA, ajoutez un module et utilisez le code suivant (peut-être besoin d'être ajusté 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, disons que la cellule A1 contient 0x00006cd2c0306953, la formule de A2 =HexadecimalToDecimal(A1)entraînera 1.19652E+14. Formatez la colonne en un nombre avec zéro décimale et le résultat sera 119652423330131.

zedfoxus
la source
3

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)

[Avertissement: non testé pour le moment]

Plus tard: je suis maintenant dans une feuille de calcul, prêt à tester. Changez le 3,5 dans MID en 3,6. Hmm .. Toujours pas bien.

Il s'avère que le HEX2DEC travaille sur des valeurs hexadécimales signées, donc le premier terme finit par être négatif. Je ne sais pas pourquoi, mais voici la version fixe qui ajoute 2 ^ 40 (ou 16 ^ 10, car nous travaillons en hexadécimal) 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) se trouve être 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.

Bill Nace
la source
1
Seul le 40e bit est le bit de signe, vous pouvez donc simplement diviser la valeur 64 bits en deux valeurs 32 bits et ce sera toujours positif. Sinon, ajoutez un zéro à la chaîne hexadécimale si elle est inférieure à 37 bits
phuclv
2

Une mauvaise façon d'effectuer cette conversion, sans utiliser de fonction (voir ce fil de discussion Excel pour cela) est d'utiliser cette formule pour calculer la valeur de chaque caractère de la chaîne, puis de les résumer. Cela implique évidemment d'utiliser des cellules temporaires pour décomposer le nombre:

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

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

Dominique Jacquel
la source
1
IMHO 16^(ROW() - 1)est beaucoup plus propre et plus facile à lire quePOWER()
phuclv
2

Essayez ce qui suit:

=HEX2DEC(RIGHT(D93;8))+HEX2DEC(LEFT(D93;LEN(D93)-8))*POWER(2;32)
Stas
la source
pourquoi ne pas utiliser 2^32?
phuclv
0

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

user2794645
la source
0

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

George H. Barbehenn
la source
-2

Cette fonction a changé, essayez d'utiliser

=HEXDEC(C8)

donc sans numéro 2 entre HEX & DEC

Riad Krim
la source
1
Cela ne fonctionne pas du tout
Nathan Fellman
Je pense que cette fonction dépend de la langue, quelle est la langue principale de votre application Excel et de votre version ..?
Riad Krim
Office 2010 en anglais
Nathan Fellman
4
La fonction HEX2DEC (ou HEXDEC) est limitée à 40 bits (10 caractères), et votre numéro est de 12 caractères office.microsoft.com/en-us/excel-help/…
Riad Krim
Comment cette langue dépend-elle? Il n'y a même pas de séparateur de fonctions comme ,ou ;ici
phuclv