Convertion string hexa [Résolu]

Signaler
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011
-
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011
-
Bonjour,

Je cherche l'inverse de la fonction itoa. Pour convertir une chaine de caractère en héxadécimal.

J'utilise la fonction suivante pour convertir un entier en héxa dans une chaine :
DWORD dwTest;
char szBuffer[32 + 1] = "";
itoa(dwTest, szBuffer, 16);

J'aimerai la fonction qui fasse l'inverse, atoi ne fonctionne pas puisqu'on ne peux spécifié le base16.

Merci
A voir également:

10 réponses

Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
2
Il faut lire la documentation sur une fonction avant de l'utiliser et de dire à tort qu'elle ne fonctionne pas.

Si un long est codé sur 32 bits alors 3419196878 est en dehors du rang si il est signé (ce qui est le cas par défaut).

const char * s = "cbcccdce";

unsigned long n = strtoul(s, NULL, 16);
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
#include <math.h>

int HexToDec(char *Hexadecimal)
{    int i 0, decimal 0, Long = 0, ANSI_Hexa = 0;

    while(Hexadecimal[Long] != 0)
        Long++;

    for(i=Long-1;i>=0;i--)
    {
        if(Hexadecimal[i] >= 48 && Hexadecimal[i] <= 57)
            decimal = decimal + (Hexadecimal[i]-48)*((int)pow(16, i));
        else
        {
            ANSI_Hexa = Hexadecimal[i];
            decimal = decimal + ((ANSI_Hexa-55)*(int)pow(16, i));
        }
    }
    return decimal;
}

Cette fonction convertira une chaine de caratère en majuscule (FF00FF par exemple) en entier.
C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution

http://programmationdebat.discutforum.com
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
2
Il faut utiliser les fonctions strto*, soit strtol pour convertir une chaine vers un long.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
[auteurdetail.aspx?ID=617077 SAKingdom]
> Pas beau du tout d'utiliser pow pour faire ca (utiliser les opérateur de décalage)
Toi qui parle si souvent d'optimisation c'est un peu dommage (par exemple toujours finir tes boucles vers zéros, en gros ca sert à rien)
Ton Hexadecimal n'est pas déclaré, mais autant utiliser un tableau de taille 256
Hexadecimal[i] = i pour ['1'..'9']
Hexadecimal['A'] = Hexadecimal['a'] = 10; etc

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Cette fonction n'est pas de moi. C'est un simple copier coller. Je ne connaissait pas non plus strtol.

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution

http://programmationdebat.discutforum.com
Messages postés
14779
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
4 août 2020
92
J'ai fait une soource de conversion vers les chaines de caractères, spritf() quoi, plus quelques autres fonctions... C'est par ici

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
14779
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
4 août 2020
92
Oups...pardon!
Je viens de relire le sujet...et c'est en fait dans l'autre sens :( désolé

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011

Merci pour les réponses. J'ai testé strtol mais je n'obtiens pas le résultat voulu.

char szHexa[] = "cbcccdce";
DWORD dwHexa;
char *pEnd;

dwHexa = strtol(szHexa, &pEnd, 16);

Résultat dwHexa = 2147483647 au lieu de 3419196878 , si quelqu'un peux m'expliquer pourquoi.
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011

Ok j'ai capté pourquoi ça fonctionne pas, la fonction strtol n'accepte que des caractères numériques dans la chaine (comme aoti), elle ne peux donc pas convertir une chaine hexadécimale...
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011

MERCI STEVE!!!