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 :

C++ WORD to String


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Par défaut C++ WORD to String
    Bonjour à tous,
    Actuelllement j'ai un WORD wbuf, et j'aimerais pouvoir convertir ce word en String ou le char ch en String

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       char  ch;
    WORD wBuf;
     ch=((char)wBuf);
            printf("%c",ch);
    J'ai essayé des tonnes de solutions, mais je ne parviens pas à la bonne solution.

    Merci de votre aide.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    printf("%d",wBuf); ?

  3. #3
    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
    Bonjour à toi.
    Ça vient d'où, ce WORD?
    Ce n'est pas dans la bibliothèque standard, à vue de nez, je dirais la lib windows…

    J'ai bien envie de répondre "va voir la documentation", mais quelqu'un aura sûrement mieux.

    Sinon, il y a toujours le ostringstream (<sstream>)
    vois cette entrée de la faq: convertir un nombre en chaine

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    tu parles bien de la std::string ? Auquel cas tu as plusieurs constructeurs possibles.
    Mais sais-tu ce qu'est un WORD ?
    http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
    WORD
    A 16-bit unsigned integer. The range is 0 through 65535 decimal.
    This type is declared in WinDef.h as follows:
    typedef unsigned short WORD;
    Donc, pourquoi un char ? Ou un string ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Par défaut
    oublions le WORD, je le recupere bien dans mon char ch; avec un simple cast.
    La question est donc plutot comment convertir mon char ch en std::String.

    Merci

  6. #6
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    string étant entre autres choses un conteneur de chars, tu peux tout simplement utiliser la méthode push_back().

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 116
    Par défaut
    J'ai trouvé la solution
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     ch=((char)wBuf);
     
                std::string str;
                str.push_back(ch);
    merci a tous

  8. #8
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Heuu...

    Le problème, c'est qu'un WORD est codé (pour le cas présent) sur 16 bits, alors qu'un char l'est sur... 8...

    Du coup, lorsque tu fais la conversion C style
    tu ne récupères que... les 8 premiers bits de ta variable d'origine, ce qui ne correspond qu'à... une fourchette de 255 valeurs

    Tu as donc, au minimum, une perte d'information de la moitié des bits qui constituent ton word.

    De plus, il faut savoir que le type char peut etre utilisé de deux manière:
    • comme valeur numérique, dans une fourchette de valeurs allant de -128 à 127 pour char et dans une fourchette de valeurs allant de 0 à 255 pour le unsigned char ou
    • comme index de la table ASCII qui fourni l'ensemble de base des différents symboles que l'on peut vouloir afficher (dont les lettres et les chiffres, mais d'autres encore
    Et c'est de ce deuxième point que vient tout le problème suivant.

    En effet, il faut savoir que les 32 premières valeurs (de 0 à 31) de la table ASCII sont des "caractères non imprimables" tels que '\0' (valeur 0) qui représente le caractère terminal de la chaine, '\t' qui représente une tabulation ou encore '\n' qui représnte un retour à la ligne.

    Mais cela signifie aussi que la valeur 1 ne correspond pas au caractère '1'...

    L'indice du caractère 1 dans la table ASCII est... 48

    Or, bien que la classe string soit, effectivement, un conteneur de char, elle les considère comme... les indexes de la tables ASCII.

    Et donc, outre le fait que tu perds 8 bits de ta valeur d'origine, tu te trouves dans une situation où tu vas fatalement insérer dans ta chaine de caractères non pas la représentation "chiffrée" de la valeur, mais bien... un caractère unique correspondant à l'index de la table ASCII.

    Tu risques donc d'avoir un affichage pour le moins surprenant lorsque tu en arriveras à... vouloir afficher tes valeurs (penses qu'il faut pas moins de trois chiffres pour représenter ne serait-ce que la valeur 162 et pas moins de 5 pour être sur de pouvoir afficher toutes les valeurs possibles d'un WORD )

    Si ton souhait est de créer une chaine de caractères qui représente la valeur exacte de ton WORD, alors, il faut envisager d'avoir recours aux technique de conversion
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/08/2010, 08h48
  2. convertir un WORD* en string
    Par dvechamb dans le forum C++
    Réponses: 1
    Dernier message: 07/12/2009, 15h35
  3. Pilotage Word : Cast Range à String
    Par TomRay dans le forum VB.NET
    Réponses: 2
    Dernier message: 13/11/2008, 17h25
  4. renvoyer ce que je tape dans word dans string
    Par battit64 dans le forum VBA Word
    Réponses: 5
    Dernier message: 25/03/2008, 22h18
  5. convertion d'un fichier word en string
    Par noustre dans le forum Windows Forms
    Réponses: 1
    Dernier message: 02/03/2008, 19h01

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