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 :

AnsiString et buffer


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut AnsiString et buffer
    Bonjour,

    La Classe AnsiString est très intéressante pour manipuler facilement les chaînes de caractères.
    Quelqu'un connait-il une classe permettant de manipuler de façon similaire un buffer quelconque (pouvant contenir l'octet nul) ?

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Bonjour,

    Qu'entend tu par "manipuler de façon similaire" ? Quels types d'action souhaite tu faire par exemple?

  3. #3
    Membre très actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Par défaut
    Citation Envoyé par engrobel Voir le message
    Bonjour,
    Quelqu'un connait-il une classe permettant de manipuler de façon similaire un buffer quelconque (pouvant contenir l'octet nul) ?
    En fait la réponse est "oui c'est l'AnsiString" quelque part, puisque c'est justement spécialement fait pour éviter de se prendre la tête avec les char pour la manipulation de caractères.

    Personnellement lorsque j'ai en entrée un char[500] ou un char * la première chose que je fais c'est de le convertir en AnsiString, pour pouvoir le manipuler facilement, puis ensuite je le reconverti en tableau de caractère ( char ) avec un octet nul en fin de chaine pour garder le format original ( si besoin, sinon je reste en AnsiString ).

    remarque : il existe le .c_str() pour convertir l'AnsiString en CString.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut
    Tout à fait d'accord avec toi Argol_Medusa. J'utilise régulièrement l'AnsiString pour concaténer, extraire des séquences de caractères etc. Mais quand les buffers (comme les trames de communication) peuvent contenir l'octet 0, l'AnsiString est inutilisable.

  5. #5
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Posts ajouté avant le Rollback

    Citation Envoyé par henderson
    Salut !

    Le problème est de savoir si le caractère NUL a un rôle particulier dans le tableau.
    S'il s'agit d'un séparateur de chaînes, dans ce cas il suffit de récupérer les chaînes dans un TStringList sous forme d'AnsiString ou bien de se contenter de traiter au niveau char* à l'aide d'un TList pour mémoriser l'adresse du premier char de chaque chaîne ou avec un simple pointeur pour balayer le buffer.
    Bien sûr ça dépend du traitement à effectuer en aval !
    Ce n'est pas très compliqué à faire... !

    A plus !
    Citation Envoyé par copeau31
    Je me suis aussi posé cette question, récemment, pour travailler sur du binaire.

    finalement, je suis resté avec mes buffers en BYTE*, en faisant des new BYTE[] et des delete[] pour l'allocation.
    Citation Envoyé par Argol_Medusa
    Citation Envoyé par engrobel
    Tout à fait d'accord avec toi Argol_Medusa. J'utilise régulièrement l'AnsiString pour concaténer, extraire des séquences de caractères etc. Mais quand les buffers (comme les trames de communication) peuvent contenir l'octet 0, l'AnsiString est inutilisable.
    En fait justement je suis en ce moment sur un projet de communication ethernet avec des trames à remplir, trames pouvant être très longues ( un char Buffer[4096]; par exemple ) et dans lequel je viens écrire des données, données étant des unsigned long int ( 4 octets ), des booleans ( un bit ) ou des strings suivant la position dans le buffer ( avec en plus possibilité de changer de big endian en little endian )

    Tous mes traitements de caractères se font en AnsiString ( enfin en CString en ce moment car je suis sous visual studio - beurk - ) et lorsque mon traitement est terminé, au moment d'inscrire la string dans ma trame, je fais simplement une boucle for qui recopie chaque caractère + un ajout de 0x00 à la fin.

    Je n'ai pas le borland builder sous les yeux pour vérifier avec l'AnsiString comment s'appelle la commande mais en CString c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CString TEST="Test_de_trame";
       char test[10];
       for (n=0 ; n<10 ; n++)
           test[n]=TEST.operator [](n);
       test[9]='\0';
       printf("%s",test);
    En AnsiString de tête tu dois avoir aussi l'operator sinon essaye .substring je ne sais plus exactement mais c'est pareil
    Citation Envoyé par engrobel
    Si je résume, on peut se débrouiller dans certains cas avec des AnsiStrings et des TStringLists (en faisant gaffe au 0), sinon il faur revenir aux tableaux de caractères. Mais personne n'a encore écrit une classe permettant de manipuler des buffers contenant des 0!

    Merci quand même.
    Citation Envoyé par sat83
    Citation Envoyé par engrobel
    Mais personne n'a encore écrit une classe permettant de manipuler des buffers contenant des 0!
    Il n'est jamais trop tard!

    De mon coté je ne pense pas que les AnsiString soient très adaptées pour le traitement des buffers. J'utiliserais plutot les Stream, avec TMemoryStream par exemple (même si l'utilisation n'est pas similaire à AnsiString).

Discussions similaires

  1. stencil buffer
    Par patapetz dans le forum OpenGL
    Réponses: 6
    Dernier message: 26/02/2004, 17h23
  2. A propos depth buffer
    Par j.yves dans le forum DirectX
    Réponses: 1
    Dernier message: 03/12/2002, 00h41
  3. Vider le buffer du clavier
    Par flavien tetart dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 12/07/2002, 08h35
  4. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00
  5. Alpha blending et Z-buffer directx 8
    Par Cesar4 dans le forum DirectX
    Réponses: 1
    Dernier message: 23/05/2002, 12h58

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