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

Selune6666 Messages postés 59 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 14 janvier 2008 - 16 nov. 2007 à 11:10
SAKingdom Messages postés 3212 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.


 

4 réponses

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
16 nov. 2007 à 11:39
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+
0
Selune6666 Messages postés 59 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 14 janvier 2008
16 nov. 2007 à 11:59
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);
}
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
16 nov. 2007 à 14:56
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!!!
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
16 nov. 2007 à 18:23
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++ (@++)<!--
0
Rejoignez-nous