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++ std:string en hexadécimal ?


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Points : 149
    Points
    149
    Par défaut c++ std:string en hexadécimal ?
    Hello

    tout est dans le titre:

    le problème a la base ,c'est les nom de fichier, vu qu'on peux y mettre casiment tout et n'importe quoi... je vai tout convertir en format hexa, sa devrai alors plus poser de problème. seulment voila on dirait que c'est faux ...
    voila un exemple:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    #include <iostream>
    #include <string>
    #include <sstream>
    #include <cstring>
    #include <exception>
    #include <iomanip>
    using namespace std;
     
    std::string toHex(const std::string& instr)
    {
    using namespace std;
    ostringstream oss;
    oss << hex << setw(2) << setfill('0');
    for(string::const_iterator i = instr.begin(); i != instr.end(); ++i)
    {
    if(i != instr.begin())
    {
    oss << ":";
    }
    //oss << "0x" << static_cast<unsigned short>(*i);
    oss << "" << static_cast<unsigned short>(*i);
    }
    return oss.str();
    }
     
    int main()
    {
    std::cout << toHex("Ma�anaDB.pdb (codage non valide)") << std::endl;
    return 0;
    }
    j'obtien:
    004d:61:ffef:ffbf:ffbd:61:6e:61:44:42:2e:70:64:62:20:28:63:6f:64:61:67:65:20:6e:6f:6e:20:76:61:6c:69:64:65:29
    je me demande si la sortie est vraiment valable car:

    004d:61:ffef:ffbf:ffbd
    semble erronnée c'est lier aux caractère : ici j'ai l'impretion que apres le Ma sa pose souci si quelqu'un a une idée je suis preneur

    Merci d'avance

  2. #2
    Membre expérimenté

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Points : 1 418
    Points
    1 418
    Par défaut
    Bonjour,

    en fait il n'y a que cette portion de string qui foire :
    M(4d)a(61)�(ffef:ffbf:ffbd)a(61)n(6e)a(61)D(44)B(42)...

    je penses que cela vient des caractères spéciaux ou des expressions HTML dans les string. Ton truc n'est pas interprété caractère par caractère.

    regarde ici et essaye de remplacer ton expression � par \uFFFD
    Nullius in verba

  3. #3
    Membre éprouvé

    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
    Points : 1 086
    Points
    1 086
    Par défaut
    Ca vaudrait peut-être le coup d'utiliser wchar_t :
    http://codepad.org/IdGEQfgp

    ñ vaut 0x00F1 en UTF-16 (le format de wchar_t) et j'obtiens effectivement 00f1

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par cob59 Voir le message
    Ca vaudrait peut-être le coup d'utiliser wchar_t :
    http://codepad.org/IdGEQfgp

    ñ vaut 0x00F1 en UTF-16 (le format de wchar_t) et j'obtiens effectivement 00f1
    voila ce que sa donne avec le code que tu a coller: j'ai mis uniquement ce caractère pas le reste de la phrase:
    regarde ici et essaye de remplacer ton expression � par \uFFFD
    Euh j'ai tester mai Cela ne change rien ??

    Merci de m'aider

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Points : 725
    Points
    725
    Par défaut
    Bonjour,

    J'ai essayé le code que tu donnes dans ton premier post avec Visual C++ 2008 et le résultat que j'obtiens est différent du tien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    004d:61:26:23:36:35:35:33:33:3b:61:6e:61:44:42:2e:70:64:62:20:28:63:6f:64:61:67:65:20:6e:6f:6e:20:76:61:6c:69:64:65:29
    Je suspecte donc une différence d'encodage des caractères entre ta plateforme et la mienne. Ça serait bien que tu nous éclaire sur le contexte que tu utilises (plateforme, compilateur, encodage)...
    "By and large I'm trying to minimize mentions of D in C++ contexts because it's as unfair as bringing a machine gun to a knife fight." - Andrei Alexandrescu

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2006
    Messages : 412
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par Niark13 Voir le message
    Bonjour,

    J'ai essayé le code que tu donnes dans ton premier post avec Visual C++ 2008 et le résultat que j'obtiens est différent du tien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    004d:61:26:23:36:35:35:33:33:3b:61:6e:61:44:42:2e:70:64:62:20:28:63:6f:64:61:67:65:20:6e:6f:6e:20:76:61:6c:69:64:65:29
    Je suspecte donc une différence d'encodage des caractères entre ta plateforme et la mienne. Ça serait bien que tu nous éclaire sur le contexte que tu utilises (plateforme, compilateur, encodage)...
    Dac
    Debian squeez , en utf8
    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
     
    ii  g++                                      4:4.4.5-1                         The GNU C++ compiler
    ii  g++-4.4                                  4.4.5-8                           The GNU C++ compiler
    ii  gdb                                      7.0.1-2+b1                        The GNU Debugger
    ii  gdb-doc                                  7.1-1                             The GNU Debugger Documentation
    ii  gdbserver                                7.0.1-2+b1                        The GNU Debugger (remote server)
    ii  libeggdbus-1-0                           0.6-1                             D-Bus bindings for GObject
    ii  libgdbm3                                 1.8.3-9                           GNU dbm database routines (runtime version)
    ii  gcc                                      4:4.4.5-1                         The GNU C compiler
    ii  gcc-4.3                                  4.3.5-4                           The GNU C compiler
    ii  gcc-4.3-base                             4.3.5-4                           The GNU Compiler Collection (base package)
    ii  gcc-4.4                                  4.4.5-8                           The GNU C compiler
    ii  gcc-4.4-base                             4.4.5-8                           The GNU Compiler Collection (base package)
    ii  gcj-4.4-base                             4.4.5-2                           The GNU Compiler Collection (gcj base package)
    ii  gcj-4.4-jre
    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
     
    $ locale
    LANG=fr_CH.UTF-8
    LANGUAGE=fr_CH:fr
    LC_CTYPE="fr_CH.UTF-8"
    LC_NUMERIC="fr_CH.UTF-8"
    LC_TIME="fr_CH.UTF-8"
    LC_COLLATE="fr_CH.UTF-8"
    LC_MONETARY="fr_CH.UTF-8"
    LC_MESSAGES="fr_CH.UTF-8"
    LC_PAPER="fr_CH.UTF-8"
    LC_NAME="fr_CH.UTF-8"
    LC_ADDRESS="fr_CH.UTF-8"
    LC_TELEPHONE="fr_CH.UTF-8"
    LC_MEASUREMENT="fr_CH.UTF-8"
    LC_IDENTIFICATION="fr_CH.UTF-8"
    voila je croit que tout y est

    Merci de m'avoir lu

Discussions similaires

  1. std::string to_string
    Par shirya dans le forum SL & STL
    Réponses: 5
    Dernier message: 20/12/2005, 15h28
  2. Réponses: 7
    Dernier message: 25/11/2005, 17h11
  3. [débutant] equivalent à sprintf pour les std::string
    Par Biosox dans le forum SL & STL
    Réponses: 22
    Dernier message: 26/08/2005, 12h46
  4. cannot convert 'std::string' to 'System::String ^'
    Par broadhead dans le forum MFC
    Réponses: 1
    Dernier message: 14/06/2005, 11h37
  5. std::string, operator =
    Par tut dans le forum SL & STL
    Réponses: 10
    Dernier message: 05/11/2004, 12h07

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