Convertion tab de char vers tab de int [C++]

Messages postés
59
Date d'inscription
mardi 23 janvier 2007
Statut
Membre
Dernière intervention
14 janvier 2008
- - Dernière réponse : SAKingdom
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
- 16 nov. 2007 à 18:23
Bonjour,
Je suis actuellement sur un projet de convertisseur de base (dec, binaire, hexa , octal) en C++
Mon utilisateur entre le nombre a convertir dans un tableau de caractere. Nombre[]
Lorsque le nombre entré est un décimal , pour le convertir j'utilise ceci entier=atoi(nombre) la conversion char int se fait correctement.
Cependant lorsque le nombre entré est binaire , octal ou hexadécimal je dois convertir ce tableau de charractere en tableau d'entier afin d'effectuer les calculs par la suite et la mon probleme commence. On va nommer ce tableau d'entier , tab[].
Je n'arrive pas a effectuer cette convertion. J'ai chercher differente façon de le faire sans succes.
-convertion direct tableau char vers le tableau int
-j'ai essayer aussi , avec une variable entre les 2 tableaux: Un char prend la valeur de la premiere case du tableau de char puis je convertir cette variable  grace a la commande tab[1]=atoi(variable) cela ne marche pas non plus.  (j'utilise des boucle for hein ^^)
Je ne comprend pas pourquoi cela ne marche pas avec cette deuxieme methode.
Voila j'espere avoir exposer clairement mon pb en vous remerciant d'avance des pistes , methodes , solutions que vous pouvez me proposer.


 
Afficher la suite 

4 réponses

Messages postés
1055
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
7
0
Merci
Si j'ai bien compris se que tu veux faire :

char test[9]="01000010";
    int tab[8],i=0;
    char *P,Tmp[2];

    Tmp[1]=0;
    P=test;
    do
    {
        Tmp[0]=*(P++);
        tab[i++]=atoi(Tmp);
    }
    while(*P!='\0');
Je pense que ton sousi venais du fait que lors du atoi tu faisais atoi(test[0]) or il faut absolument qu'il y ai un '\0' en fin de chaine.
A+
Commenter la réponse de Pistol_Pete
Messages postés
59
Date d'inscription
mardi 23 janvier 2007
Statut
Membre
Dernière intervention
14 janvier 2008
0
Merci
selon le deboggeur :
invalid conversion from char to const char

j'ai pas tout compris a ce que tu a marqué...

voici la partie de code en question:

char nombrex (la variable qui reçois),nombre[N] (le tableau de charact)
int tab[N] (mon tableau d'entier), taille (nombre de charactere ds tableau d'entier calculer dans une fonction précédente)

for(int i=0;i<taille;i++)
{
nombrex=nombre[i];
tab[i]=atoi(nombrex);
}
Commenter la réponse de Selune6666
Messages postés
1055
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
7
0
Merci
Sur quelle ligne de mon code cela fait cette erreur!!
invalid conversion from char to const char
je supose que c'est sur  tab[i++]=atoi(Tmp);
mais ca compile très bien sur VS2005.

Tu as compiler avec quoi?

Fait attention avec  '\0' en fin de chaine!!!
Commenter la réponse de Pistol_Pete
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
Ce n'est pas nécessaire d'utiliser atoi pour une chaine ascii.
Tu peux directement, à même la chaine, convertir en int sans utiliser un autre tableau.
Suffit de soustraire 0x30 je crois (le caractère '0')

char tmp[] = "54236", *c = tmp;

while(*c) {
    *c -= '0';
    c++;
}

Le 0 de fin de chaine sera toujours présent mais il suffit de ne pas le compter (taille du tableau - 1)

C++ (@++)<!--
Commenter la réponse de SAKingdom