J'ai une cellule contenant cette valeur:
0x00006cd2c0306953
et je veux le convertir en un nombre.
J'ai essayé:
=HEX2DEC(C8)
où C8
est la cellule contenant ma valeur hexadécimale.
J'obtiens une erreur #NUM.
Qu'est-ce que je fais mal?
microsoft-excel
conversion
hexadecimal
Nathan Fellman
la source
la source
Réponses:
Vous pouvez simplement utiliser:
len(A1)
vous donne la longueur de la0x
chaîne. Exclure la longueur de0x
, la chaîne restante est le nombre hexadécimal. Utilisez la fonction Excel pour obtenir la déc.la source
HEX2DEC
accepte un maximum de dix chiffres hexadécimaux. La chaîne dans la question0x00006cd2c0306953
, est de 18 caractères. Votre solution évalueRIGHT(A1,(LEN(A1)-2))
; 18−2 est 16, doncRIGHT(…)
retourne00006cd2c0306953
, 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?)Comme TwiterZX l'a indiqué,
Hex2Dec
la saisie de est limitée à 10 caractères et à6cd2c0306953
12 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)Dans Excel, disons que la cellule A1 contient
0x00006cd2c0306953
, la formule de A2=HexadecimalToDecimal(A1)
entraînera1.19652E+14
. Formatez la colonne en un nombre avec zéro décimale et le résultat sera119652423330131
.la source
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.
[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:
Cependant, cela ne fonctionne que si le DROIT (C8,10) se trouve être négatif. Voici ma solution générale:
Ugggh.
la source
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:
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.
la source
16^(ROW() - 1)
est beaucoup plus propre et plus facile à lire quePOWER()
Essayez ce qui suit:
la source
2^32
?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.
la source
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.
la source
Cette fonction a changé, essayez d'utiliser
donc sans numéro 2 entre HEX & DEC
la source
,
ou;
ici