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++Builder Discussion :

convertir une struc en ansistring


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 22
    Points : 22
    Points
    22
    Par défaut convertir une struc en ansistring
    Hello

    j'ai defini une structure du genre:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct StructHeaderIp {
      unsigned int version : 4;           
      unsigned int ihl : 4;               
      unsigned int tos : 8; 
     } mastructure;
    et j'aimerais ensuite utiliser une ansistring à laquelle j'affecterais cette structure afin de pouvoir y acceder octet par octet.

    Du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      AnsiString a;
      a=<la bonne syntaxe ;) > mastructure
      octet1=a[0] 
      ....
    Je ne vois pas trop comment faire.
    Si vous aviez une idée ...

    Merci

    bob

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 22
    Points : 22
    Points
    22
    Par défaut
    bon, je me suis debrouillé autrement, en passant par une char* .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    AnsiString IpHeader::IpHeaderToHex()
     {
     AnsiString HEX="";
     unsigned char c;
     char * pc=(char *)HeaderIp;
     for (int i=0; i< sizeof(StructHeaderIp) ;i++) {
        c = pc[i];
        HEX = HEX + IntToHex(c,2) + " ";
     }
     return HEX ;
     }
    Ca marche bien
    Par contre si qqun peut m'expliquer comment transformer directement la structure en ansistring, je suis preneur.

    A+
    bob

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    comment transformer directement la structure en ansistring, je suis preneur.
    Directement, il n'y a pas de solution. La méthode que tu as essayé n'est pas en général sans risque, puisqu'elle suppose que les champs de ta structure sont consécutifs.
    utiliser une ansistring à laquelle j'affecterais cette structure afin de pouvoir y acceder octet par octet.
    Si le but est d'accéder octet par octet, tu peux surcharger l'opérateur [] sans passer par un AnsiString. Le code ne sera pas plus complexe et l'utilisation "plus élégante"

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 22
    Points : 22
    Points
    22
    Par défaut
    OK.

    Qu'entends tu par "surcharger l'operateur []" ? . (Suis un peu noob ...)

    Merci
    bob

  5. #5
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Tout dépend de ce que tu veux faire exactement :
    Si tu veux juste la valeur de l'octet sans conversion en ascii, tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    struct StructHeaderIp {
      unsigned int version : 4;
      unsigned int ihl : 4;
      unsigned int tos : 8;
     char operator[](int i){ return *((char*)this+i);};
     
     } m;
    ....
    char c0 = m[0];
    char c1  = m[1];
    Si tu le veux dans un AnsiString après conversion de la valeur sur 8 caractères ASCII
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     struct StructHeaderIp {
    ...
    AnsiString  operator[](int i){ return AnsiString::IntToHex(*((char*)this+i),2);};
    } m ;
    ...
    AnsiString c0 = m[0];
    ou limité à deux caractères ASCII
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     AnsiString  operator[](int i){AnsiString s= AnsiString::IntToHex(*((char*)this+i),2);
      return s.SubString(s.Length()-1,2);};

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 22
    Points : 22
    Points
    22
    Par défaut
    Merci

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

Discussions similaires

  1. [FAQ]Comment convertir une std::string en AnsiString ?
    Par Invité dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/11/2006, 18h08
  2. Convertir une chaine en format heure
    Par Lars dans le forum ASP
    Réponses: 3
    Dernier message: 24/05/2005, 11h44
  3. [dbase3]Convertir une base de données sous windows
    Par nux dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 04/10/2003, 14h25
  4. Réponses: 3
    Dernier message: 28/09/2003, 10h46
  5. Convertir une AnsiString en hexadecimal
    Par manathan01 dans le forum C++Builder
    Réponses: 3
    Dernier message: 26/12/2002, 09h27

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