Convertion string hexa [Résolu]

Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011
- - Dernière réponse : HeavenForsaker
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011
- 2 août 2006 à 14:18
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
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
2
3
Merci
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);

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 206 internautes nous ont dit merci ce mois-ci

Commenter la réponse de steve_clamage
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
#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
Commenter la réponse de SAKingdom
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
2
0
Merci
Il faut utiliser les fonctions strto*, soit strtol pour convertir une chaine vers un long.
Commenter la réponse de steve_clamage
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
[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
Commenter la réponse de vecchio56
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
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
Commenter la réponse de SAKingdom
Messages postés
14681
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
5 décembre 2019
90
0
Merci
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
Commenter la réponse de BunoCS
Messages postés
14681
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
5 décembre 2019
90
0
Merci
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
Commenter la réponse de BunoCS
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011
0
Merci
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.
Commenter la réponse de HeavenForsaker
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011
0
Merci
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...
Commenter la réponse de HeavenForsaker
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011
0
Merci
MERCI STEVE!!!
Commenter la réponse de HeavenForsaker