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 :

De string à code ASCII


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2010
    Messages : 116
    Par défaut De string à code ASCII
    Salut à tous,
    Comment, SVP, obtenir le code ASCII de la lettre extraite dans ce bout de code?
    D'après la FAQ, j'ai cru comprendre qu'il fallait d'abord convertir cette lettre en 'char', mais je n'ai pas compris l'explication ni l'exemple qui est donné.

    Merci d'avance.
    L.P.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        string str("Hello");
        string sub = str.substr(1,1); // Extraction de la deuxieme lettre seulement
    // Ici je souhaiterais obtenir le code ASCII de la lettre extraite ci- dessus
     
        cout << sub << endl;
     
        return 0;
    }

  2. #2
    Membre éclairé Avatar de supaplex
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Avril 2012
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Avril 2012
    Messages : 47
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        string str("Hello");
        string sub = str.substr(1,1); // Extraction de la deuxieme lettre seulement
    // Ici je souhaiterais obtenir le code ASCII de la lettre extraite ci- dessus
     
        cout << int(sub[0]) << endl;
     
        return 0;
    }

  3. #3
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        string str("Hello");
        const char* ascii_str = str.c_str();
     
        if ((str.length() > 1) && (ascii_str != NULL)) {
            printf("%d", ascii_str[1]);
        }

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 760
    Par défaut
    Comme tout le monde s'y met....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <iostream>
    #include <string>
     
    int main()
    {
        std::string str("Hello");
        std::cout << int(sub[1]) << std::endl;
    }
    Au passage, il n'y a aucune raison d'utiliser substr.

  5. #5
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2010
    Messages : 116
    Par défaut
    Salut à tous,
    Merci pour vos promptes réponses.
    J'ai hâte de les essayer toutes.
    Merci encore à Koala01 pour son message à propos des conditionnelles que j'ai découvert par hasard en 'postant' celui en cours.
    Je lui promets de faire l'exercice qu'il m'a donné dés que j'ai fini celui-là.

    L.P.

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Comme tu as eu plein de code, mais pas d'explications, en voici:

    la fonction string::substr retourne une string.
    l'opérateur [] (string::operator[]) retourne un char.

    les opérateurs << de ostream sont nombreux, le compilateur cherche le plus adapté aux types des opérandes.
    Il trouve respectivement:
    1. operator << (ostream &, string const&), qui affiche la chaine complete
    2. ostream::operator << (char), qui affiche le caractère


    Mais il en existe d'autres, potentiellement plus intéressant. Par exemple, ostream::operator << (int), qui affiche un entier.
    La solution est donc de faire choisir celle-ci au compilateur, en convertissant le caractère à afficher.

    Il y a plusieurs solutions, parmi:
    • le vieux cast à la C, qui est déconseillé, voire déprécié: cout << (int) (str[1]) << endl;
    • la conversion "fonction style", c'est à dire la notation "constructeur de int": cout << int(str[1]) << endl;
    • la conversion explicite: cout << static_cast<int>(str[1]) << endl;

    Je recommande vivement cette dernière: elle explicite parfaitement qu'on fait une conversion, et on peut rechercher facilement ce mot clé static_cast (idéalement, je chercherai "_cast").


    Note que str.sub(1, 1)[0] retourne la même valeur que str[1] (à ceci près que c'est une référence sur une copie du caractère original).

  7. #7
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : retraité
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2010
    Messages : 116
    Par défaut
    Salut à tous et en particulier à 'ternel' pour ses explications académiques.
    Pour situer le problème je dois dire si que jadis.. j'ai développé quelques applications de gestion en VBA exclusivement pour Excel et Access, je m'initie à peine (2 ou 3 semaines) à C++ avec pour support (en + du site, bien entendu) les livres: "Apprendre le C++", de Claude Delannoy et "Programmez avec le langage c++", de Mathieu Nebra et Matthieu Schaller.
    Je n'ai pas dépassé la page 100 de chacun d'eux et je n'ai pas encore trouvé mes 'marques' avec l'éditeur Code::Blocks. Les choses décantent lentement.
    Je m'essaye à quelques exercices pour me familiariser avec la syntaxe mais,
    -le vieux cast à la C...
    -la conversion "fonction style"...
    -la notation "constructeur de int"...
    et
    -la conversion explicite...
    ne me parlent pas encore mais j'espère que ça va venir.
    En tous cas j'ai scrupuleusement recopié toutes ces explications dont je ne doute pas que dans quelques mois elles me seront parfaitement familières.

    Merci encore.

    P.S.
    le code de 'foetus' ne s'est pas compilé. Il doit manquer un include quelque chose. C'est dommage car j'aurais bien voulu comprendre la conditionnelle qu'il a ajouté.

    L.P.

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

Discussions similaires

  1. convertir code ascii a string
    Par chadj dans le forum NetBeans
    Réponses: 1
    Dernier message: 02/05/2013, 13h24
  2. [Débutant] Code Ascii dans variable de type string
    Par Nixeus dans le forum C#
    Réponses: 2
    Dernier message: 03/01/2012, 15h32
  3. Remplacer char dans string par code ASCII
    Par ThomasParis dans le forum Langage
    Réponses: 2
    Dernier message: 16/07/2010, 11h47
  4. transformer code ascii en string ?
    Par italiasky dans le forum Langage
    Réponses: 1
    Dernier message: 20/10/2008, 11h39
  5. [String]Comment etendre le mon Code ASCII??
    Par lanfeustdetroll dans le forum API standards et tierces
    Réponses: 24
    Dernier message: 25/07/2005, 14h42

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