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 :

conversion d'une string en char


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    22
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Par d�faut conversion d'une string en char
    Bonjour,
    j'ai le code suivant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    strcat(str,(char*)dest.Area);
    ou dest.Area est un type de string plus large que le type char (cod� sur plus d'octets)
    dest.Area est une string obtenu par un OCR (reconnaissance graphique de texte), je ne controle donc pas ce qu'il peut contenir.
    Ce code fonctionne mais provoque parfois des fermetures de la console (probablement quand un caract�re non couvert par le type char est rencontr�).
    Existe t-il une fonction qui permet de v�rifier si la chaine que l'on veut copi� (dest.Area) contient des characteres non contenus dans char (cod� sur plus d'octet) ?
    ou bien une fonction qui convertit en char en supprimant les caract�res non reconnus ?

    Merci d'avance

  2. #2
    R�dacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en s�curit�
    Inscrit en
    Mai 2007
    Messages
    11 517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Consultant en s�curit�
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par d�faut
    La bonne question, c'est : "Quel est le type de "dest.Area" ?
    Une fois que le type est connu, tu peux le copier dans des objets de m�me type.

    Si "dest.Area" est du type wchar_t (wide char) ce que tu semble dire, tu ne pourras le copier que dans une chaine de type wchar_t

    Donc d'abord, quel est le type de "dest.Area" ?
    Raymond
    Vous souhaitez participer � la rubrique R�seaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs syst�me et r�seau � configurer leurs �quipements SNMP r�seau.
    e-verbe Un logiciel de conjugaison des verbes de la langue fran�aise.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    22
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Par d�faut
    C'est justement sur ce point que je suis un peu perdu...
    Le compilateur m'indique que dest.Area est de type (void*). Et quand j'essai d'acc�der a un caract�re pr�cis de dest.Area (ex: dest.Area[5]), le compilateur me signale une erreur du genre : non arythmetic use of a void pointer

    Du coup, ce satan� dest.Area est pour moi une sorte de boite noire qui, par chance, contient bien ce que je cherche � capturer mais j'ai aucune id�e comment le manipuler.

    Question annexe : en admettant que je ne respecte pas le type de base, existe t'il un moyen s�curis� de convertir qqchose en char ((char*)variableString) qui occulte les caract�res non compris dans le type char ?

    Merci

  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
    Si tu ne connais pas le type de ta variable (et donc d'une zone m�moire), comment veux-tu en interpr�ter les donn�es qu'elle contient?
    Pour lire un void*, tu dois forc�ment faire un cast de ta variable dans le type qui lui va bien. Si tu ne sais pas en quoi la caster, t'es mal barr� pour interpr�ter les 0 et les 1 qu'elle contient...

  5. #5
    R�dacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en s�curit�
    Inscrit en
    Mai 2007
    Messages
    11 517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Consultant en s�curit�
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par d�faut
    Si dest.Area est du type void *, tu n'a pas le droit de faire dest.Area[5].

    Si tu ne sais pas ce que repr�sente dest.Area, il me semble dangereux de vouloir le transformer en chaine de caract�res � tout prix parce que tu as vu que dedans, il y avait ce que tu voulais.

    Peut �tre que les 20 premiers octets sont effectivement ta chaine mais que apr�s, c'est un bitmap ou que sais-je encore.

    Il importe donc de savoir le type de cette variable "dest" qui t'es retourn�. Il s'agit peut �tre d'une structure et dedans, tu trouveras peut �tre la longueur de la chaine qui t'int�resse.
    Raymond
    Vous souhaitez participer � la rubrique R�seaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs syst�me et r�seau � configurer leurs �quipements SNMP r�seau.
    e-verbe Un logiciel de conjugaison des verbes de la langue fran�aise.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    135
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 135
    Par d�faut
    As-tu essay� d'afficher la taille de ton dest.Area, avec sizeof?

    Tu peux p-e essay� de faire:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
        float  fTab[1024] = {0.0};
        fTab = &dest.Area;
    et afficher chaque caract�re de fTab pour tenter de trouver le <type> de dest.Area.
    Une fois que tu as le type tu peux faire une copie tel que
    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
     
        <type> typeTab[1024] = {?};
        char     str[1024] = {0};
        int       i, j;
     
        j=0;
        for(i=0; i<1024; i++)
        {
            if(typeTab[i]==0)
            {
                str[j] = 0; // Sécurité 
                break;
            }
            if(typeTab[i]<127)
            {
                str[j++] = typeTab[i];
            }
        }

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    22
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Par d�faut
    Merci pour vos r�ponses,

    quand j'essaye
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
      float fTab[1024] = {0.0};
      fTab = &dest.Area;
    le compilateur me signale :
    cannot convert `double' to `void**' in initialization

    Je sais vriament pas comment manipuler ce type void...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    22
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Par d�faut
    Il ya qqchose que je ne comprend pas. Comment cette variable dest.Area peut etre elle indiqu�e de type void** et a la fois poss�der un type inconnu et contenir des caract�res ?

  9. #9
    Membre �prouv�
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par d�faut
    As-tu lu la doc de ton OCR ? D'o� le tiens-tu ? Sans plus d'infos on ne peut pas t'aider.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    strcat(str,(char*)dest.Area);
    Tu dis que ce code fonctionne, dans ce cas c'est bel et bien un char* qui se cache derri�re le void*. Si la console plante, c'est peut-�tre que tu essaies simplement de mettre une cha�ne trop grande dans str. Utilise std::string qui n'a pas de probl�me de d�passement de capacit� et viens nous dire si �a marche.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::string str( reinterpret_cast<char*>(dest.Area) );

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    22
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Par d�faut
    Apparement le type de dest.Area est r�ellement void, rien d'autre n'est sp�cifi� dans la doc.
    Voici le code de la classe

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class TextractDest {
     public:
      TextractDest(const char *destFileName);
      TextractDest();
     
      const char *FileName; // NULL if area specifeid, else dest file name
      void *Area; // NULL if file name specified, else memory area
      int AreaSize;
    };
    TextractExport TextractSuccess TextractDestFree(TextractDest&);
    ou dest est de type TextractDest

    Je vais essayer de le caster dans un type string comme tu l'as sugg�r�, mais ca ne m'arrange pas car toute l'utilisation de cette variable str est bas�e sur le type char.

Discussions similaires

  1. Conversion de type string en char ?
    Par CoachMac dans le forum C
    R�ponses: 18
    Dernier message: 08/08/2006, 10h20
  2. conversion d'un string en char *
    Par ferry.jules dans le forum C++Builder
    R�ponses: 15
    Dernier message: 12/05/2006, 22h12
  3. (Probl�me avec...) conversion de std::string en char
    Par crossbowman dans le forum SL & STL
    R�ponses: 7
    Dernier message: 05/03/2006, 19h54
  4. caster une string en char*
    Par luta dans le forum C++
    R�ponses: 5
    Dernier message: 20/01/2006, 02h36
  5. Conversion d'une chaine de char en numerique
    Par simone.51 dans le forum SQL Proc�dural
    R�ponses: 2
    Dernier message: 25/03/2004, 16h47

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