IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Valeur ASCII d'une chaine, fct atoi() ?


Sujet :

C++

  1. #1
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Points : 141
    Points
    141
    Par défaut Valeur ASCII d'une chaine, fct atoi() ?
    bonjour tout le monde !

    Voila je me casse la tete depuis quelques minutes sur une valeur ASCII d'une chaine de caractères.

    En gros j'ai ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    char carac[2];
    String chaine;
    int i,i1,i2,dummy;
     
    carac[1] = Chaine[i];
    i1 = (int)carac[1];
    carac[2] = carac + Chaine[i+1];
    i2 = (int)carac[2];
    dummy = i1 + i2;

    Normalement ce code est dans une boucle for, au vu de la variable "i".
    donc je récupère de ma chaine (par ex chaine = "123456789"), 2 caractères et je veux en tirer la valeur ascii de ce nombre.

    Par exemple si je prends, 12, je veux sa valeur ascii, or mon code me donne la valeur de "1" et la valeur de "2". Il n'existe pas une fonction qui pourrait me retourner la valeur directement de mon nombre comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dummy = atoi(char *test);
    J'ai fait un test et ca me donne pas le meme résultat sur les 2 facons différentes.


    Le atoi() utilise un char* et moi dans mon code je n'ai que des String...

    Peut être dois je créér un char * et y ajouter mes 2 caractères?

    merci d'avance

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Je ne suis pas sur d'avoir tout compris
    Bon, pour convertir une chaîne vers un int, tu peux passer la STL (ne jamais oublier la FAQ )
    Deuxième solution, utiliser boost :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <string>
    #include <iostream>
    #include <boost/lexical_cast.hpp>
    int main()
    {
       std::string chaine("123");
       int i_valeur = boost::lexical_cast<int>(chaine);
    
       std::cout<<i_valeur;
        return 0;
    }

  3. #3
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    La valeur ASCII de 'a', c'est 'a'.
    std::cout << (int)'a' << std::endl;
    Boost ftw

  4. #4
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Points : 141
    Points
    141
    Par défaut
    passer une chaine en int, ca je sais faire, et je serai allé sur la faq .

    Par contre mon probleme était que je voulais récupérer la valeur ASCII d'un nombre précis, par ex: le nbre 57

    Avant je prennais la valeur du chiffre "5" et je l'additionnai à celle de "7"...mais c'était pas bon, voici le code que j'ai utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String tampon,Chaine;
    char * buf = new char[2];
    int dummy;
     
    tampon = "";
    tampon = tampon + Chaine[i] + Chaine[i+1];
    strncpy(buf,tampon.c_str(),2);
    dummy = atoi(buf);
    Dummy étant un int me renvoyant la valeur décimale ASCII des caractères contenus dans *buf.

  5. #5
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 362
    Points : 141
    Points
    141
    Par défaut
    Citation Envoyé par loufoque Voir le message
    La valeur ASCII de 'a', c'est 'a'.
    std::cout << (int)'a' << std::endl;
    Dans ma table ascii, 'a' correspond au nombre décimal : 97... non?

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Un bête cast de ton int vers un char ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    std::string chaine("57");
    int i_valeur = boost::lexical_cast<int>(chaine);
    char ascii = boost::numeric_cast<char>(i_valeur);
    ou:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::string chaine("57");
    std::istringstream iss(chaine);
    int i_valeur;
    iss >> i_valeur;
    char arcii = static_cast<char>(i_valeur);

  7. #7
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    J'ai du mal à comprendre (et il semble que je ne sois pas seul), mais serait-ce ceci ce que tu veux ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char s[2]="97";
    char ascii=(s[0]-48)*10+(s[1]-48);
    cout << ascii << endl;

  8. #8
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Citation Envoyé par Freud44 Voir le message
    Par contre mon probleme était que je voulais récupérer la valeur ASCII d'un nombre précis, par ex: le nbre 57
    C'est quoi la "valeur ASCII" du nombre 57 ?

    Edit :
    Je tente une hypothèse :
    La string initiale contient une suite de code ascii et le but de la manœuvre serait de convertir chaque code par sa lettre respective.
    Si c'est bien ça, alors le code de camboui est le bon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    string s = "068101118101108111112112101122";
    string s_lettre;
    for(unsigned int i = 0 ; i < s.size(); i += 3)
    {
       s_lettre.push_back( (s[i] - 48) * 100 + (s[i+1] - 48) * 10 + (s[i+2] - 48) );
    }
    std::cout << s_lettre << std::endl;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recupérer valeur hexa dans une chaine ASCII
    Par OjBarbare dans le forum ASP.NET
    Réponses: 3
    Dernier message: 22/04/2009, 09h50
  2. [RegEx] Supprimer les valeurs répétées d'une chaine
    Par Eliness dans le forum Langage
    Réponses: 1
    Dernier message: 17/12/2006, 19h55
  3. Remplacement d'une valeur hexa dans une chaine
    Par raoulchatigre dans le forum C++
    Réponses: 7
    Dernier message: 18/09/2006, 16h27
  4. Extraire une valeur entiere d'une chaine de caractere
    Par Aloneghost dans le forum Débuter
    Réponses: 2
    Dernier message: 25/04/2006, 12h23
  5. Réponses: 4
    Dernier message: 18/04/2006, 18h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo