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

MFC Discussion :

Tableau d'octets vers CString


Sujet :

MFC

  1. #1
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Par défaut Tableau d'octets vers CString
    Salut
    Il faut que je convertisse un buffer d'octets (au format unsigned char*) pour pouvoir l'afficher dans une CEdit, et comme il s'agit d'un tableau il faut que je mette ça dans un CString.

    J'arrive bien a mettre toutes les valeurs du buffer dans le CString mais a l'affichage ça affiche les symboles ascii equivalent

    ex : dans mon buffer j'ai 0x55, 0x56, 0x57
    dans le cstring j'ai bien la mm chose mais a l'affichage j'ai UVW
    comment fair pour afficher : 555657 ?
    Please aidez moi

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 303
    Par défaut
    Pour faire simple il faut que tu convertisses tes nombres en en HexAscii, c'est à dire la représentation Ascii d'un nombre hexadécimal.
    quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    unsigned char val= 0x55;
    char s[5];
    sprintfs(s,"%02x",val);
    va te donner s="0x55"
    Tu peux aussi procéder comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    unsigned char val = 0x55;
    char s[5];
    s[0] = (val & 0xF0)>>4;
    (s[0]<10)?s[0]+='0':s[0]+='A';
    s[1] = val & 0x0F;
    (s[1]<10)?s[1]+='0':s[1]+='A';
    s[2] = 0;
    va te donner s="55"

  3. #3
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Par défaut
    Salut !
    Merci Alen, de mon coté j'ai resolu le truc, ce qui est drôle finalement c'est que nos codes ont evolué exactement vers la même idée. Je viens de regarder ce que tu a écrit ; ça ressemble a la manière dont j'ai résolu la chose :
    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
    16
    17
    18
    19
    unsigned char* Buffer;
    int Taille_Buffer;
     
    //...Remplissage du buffer...
     
    //Affichage du Buffer dans la CEdit de variable membre m_cs de type CString :
     
    for (int i=0; i<Taille_Buffer; i++)
    {
    	unsigned char m_MSB, m_LSB;
    	m_MSB=(*(Buffer+i))>>4;
    	m_LSB=(*(Buffer+i))&(0x0F);
     
    	(m_MSB<10)?	m_MSB+=0x30 : m_MSB+=0x41;
    	(m_LSB<10)?	m_LSB+=0x30 : m_LSB+=0x41;
     
    	m_cs.Insert(2*i,m_MSB);
    	m_cs.Insert((2*i)+1,m_LSB);
    }
    Voila, Ex : le buffer contient [01, 02, 03, 04, ..., FF]
    Cela affiche dans l'edit box (grâce à un SetWindowtext) : "01 02 03 04 ... FF"

  4. #4
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Sinon, une solution beaucoup plus simple, c'est d'utiliser les stringstream de la STL en intégrant dans les flux l'info std::hex.
    Ne reste plus après qu'à passer le std::string en CString.

  5. #5
    Membre régulier
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Par défaut
    Citation Envoyé par spoutspout Voir le message
    Sinon, une solution beaucoup plus simple, c'est d'utiliser les stringstream de la STL en intégrant dans les flux l'info std::hex.
    Ne reste plus après qu'à passer le std::string en CString.
    Ok doky
    par contre je ne connais pas stringstream, si tu le veu bien tu pourrai me donner l'exemple de comment faire ce que tu propose stp ?

  6. #6
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    std::ostringstream oss;
    CString sBuffer;
    for(int iSize=0; iSize<sizeof(buffer); iSize++)
         oss << std::setfill('0') << std::setw(2) << std::uppercase << std::hex << buffer[iSize];
     
    sBuffer.SetString(oss.str().c_str());
    A priori, sans tester, ça "devrait" fonctionner, aux erreurs de codage près

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/06/2011, 12h26
  2. exporter un tableau de donnée vers un document word
    Par demerzel0 dans le forum Access
    Réponses: 2
    Dernier message: 04/11/2005, 11h57
  3. Conversion d'une chaîne en tableau d'octets
    Par marsupilami34 dans le forum Langage
    Réponses: 11
    Dernier message: 22/06/2005, 14h44
  4. conversion : VARIANT FAR* URL vers CString
    Par kam dans le forum MFC
    Réponses: 2
    Dernier message: 29/03/2004, 13h32
  5. [Kylix] stockage d'un tableau d'octets dans interbase
    Par georges1001 dans le forum EDI
    Réponses: 1
    Dernier message: 16/09/2003, 14h14

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