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 :

écrire de l'hexadécimal ou du décimale dans un fichier


Sujet :

C++

  1. #1
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut écrire de l'hexadécimal ou du décimale dans un fichier
    bonjour,
    j'ai une bibliothèque de caractères (alphabets non latin) en décimale et hexadécimal, exemple de code décimale :1576,alors comment je peux exploiter ces code décimale pour écrire dans un fichier texte, parceque si je fait un simple casting char(mon code décimale);
    ça marche avec les valeurs de 0 à 255 mais au delà de 255 ça marche pas il me donne des valeurs non compréhensible mème si je change l'encodage dans Microsoft word lorsque j'ouvre le fichier.
    alors ya une solution?

    merci beaucoup pour toute aide

  2. #2
    Membre chevronné

    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut
    Bonjour,

    Je précise tout de suite que je ne suis pas un expert du sujet. J'espère que ce que je te dis est à peu près correct et pourra t'éguiller sur une solution.

    Dans un fichier texte ascii standard les caracteres sont sur 7 ou 8 bits - ils sont lus par les editeurs textes et transoformé selon des tables.

    Je crois comprendre que tu utilises des caracteres codés différemment (sur x bits). Il s'agit probablement d'un format unicode. Dans ce cas, pour les caracteres existants en ascii il suffit généralement de prendre les 8 derniers ou premiers bits du caractère unicode et tu auras une equivalence ascii. Tu perderas au passage de l'information, tels que certains accents, etc, etc.

    Bonne chance,

    Grég

  3. #3
    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
    Il faut que tu utilises des wide char (wchar_t). Ce sont des char sur 16 bits justement prévus pour coder les caractères unicode.

  4. #4
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    justement, comment utiliser wchar_t
    merci

  5. #5
    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
    Ben de la même façon que les char, en utilisant les fonctions adéquates.
    Par exemple, tu utilises swprintf au lieu de sprintf,...
    Je te laisse regarder la MSDN et jette un oeil aux TCHAR, ils peuvent aussi te servir.

  6. #6
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    et je met quoi exactement dans wchar_t? je peux pas mettre mon caractère,
    parceque je doit mettre un code,alors lequel? le décimale ou bien l'hexadécimal?
    et puis, je peux écrire directement mon wchar_t dans un fichier? comme par exemple les char ? je veux dire aprés l'écriture si j'ouvre le fichier je doit trouvés des caractères et non pas des codes.
    merci bien

  7. #7
    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
    Citation Envoyé par fatjoe Voir le message
    et je met quoi exactement dans wchar_t? je peux pas mettre mon caractère, parceque je doit mettre un code,alors lequel? le décimale ou bien l'hexadécimal?
    décimal ou hexadécimal, la valeur reste la même...
    Citation Envoyé par fatjoe Voir le message
    et puis, je peux écrire directement mon wchar_t dans un fichier? comme par exemple les char ? je veux dire aprés l'écriture si j'ouvre le fichier je doit trouvés des caractères et non pas des codes.
    Les caractères UNICODE restent des caractères. Pour les caractères ASCII, il te suffit juste de rajouter un 0 de 8 bits. Par exemple, le caractère 'A' (0x41) en char devient 0x0041 en UNICODE (wchar_t).
    Rappel : char => 8 bits, wchar_t => 16bits

    Les fonctions de gestion des caractères existent aussi bien en wchar_t qu'en char. Je te rappelle aussi de jeter un oeil aux TCHAR et au mot clé USES_CONVERSION (ATL)

  8. #8
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    juste 2 questions:
    1-est ce que wchar_t marche sous linux?
    2-comment je peux convertir un wchar_t en entier ou bien décimale ou hexa ou autre code n'importe,pour stocker ses codes dans un tableau
    j'ai fait ça mais il me donne le meme chiffre pour tout les caractères dans mon fichier.(ps: j'ai un caractère non latin différent dans chaque ligne)
    en d'autre terme je veux le code correspondant à chaque caractère.(peut être ça se fait sans conversion je sais pas , c'est ce que je cherche)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    wifstream fichier("monfichier.txt");
    wstring ligne;
                            while(	getline(fichier,ligne) )
    	{
                            wchar_t c;
    			fichier.get(c);
    			long t=(long)(unsigned char) c;
    			cout<<t<<endl;
          }

  9. #9
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    Exemple: le code hexa de mon caractère est =628

    si je fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    wchar_t cre= wchar_t(628);
    mon fichier<<cre<<endl;
    il m'écrit 628 dans le fichier et non pas mon caractère souhaité
    pourquoi?
    merci

  10. #10
    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
    Essaye plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    wchar_t cre = 0x628;
    mon fichier<<cre<<endl;

  11. #11
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    non ça me donne 1576 c'est ç dire le code décimale de 628 et non pas le caractère souhaité.
    merci mais vous m'avez pas répondu au autres questions

  12. #12
    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
    - wchar_t est un type C++, donc par définition, il fonctionne n'importe où le C++ fonctionne.
    - Pourquoi ne pas stocker directement les wchar_t dans ton tableau? Ca reste des valeurs sur 16 bits...

    Rappel : que tu affiches des valeurs en hexa, ascii (=imprimable) ou entier, la valeur de base est toujours la même. En gros, si j'ai bien compris ce que tu veux, ton tableau aurait les mêmes valeur dans les deux cases!

    Pour le code, je n'ai pas la solution, peut-être il faut passer par un stringstream. Je n'ai pas Visual sous la main pour essayer.

  13. #13
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    merci pour votre aide.
    ps: vous m'avez pas dit comment convertir un caractère existant dans un fichier vers son code hexa par exemple.
    merci

  14. #14
    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
    Citation Envoyé par fatjoe Voir le message
    ps: vous m'avez pas dit comment convertir un caractère existant dans un fichier vers son code hexa par exemple.

    Encore une fois, il ne s'agit pas de convertir ton caractère mais de l'afficher de manière différente.

    Par exemple, si tu fais la déclaration suivante:Tu peux alors l'afficher de manières différentes :
    - A (caractère)
    - 65 (décimal)
    - 0041 (hexadécimal)
    - 0000000010000001 (binaire)

    mais la valeur dans la variable sera toujours la même...

  15. #15
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    mais mes caractères ne sont pas latin alors je peux pas écrire
    wchar_t char=L'Mon caractère';

    voila mon code pour lire mon fichier
    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
     
    #include <stdio.h>
    #include <string>
    #include <fstream>
    #include <iostream.h>
    #include <sstream>
     
    using namespace::std;
     
    void main(){
    wifstream fichier("fich.txt", ios::in);
    if ( fichier )
    {
    wstring ligne;
    while(	getline(fichier,ligne) )
    	{
                            wchar_t c;
    			fichier.get(c);
     
    			cout<<c<<endl;
    }//fin while
    }//fin if
    }//fin main
    il m'affiche des code ascii pour les caractères latin sinon pour les codes non latin qui sont codé sur 16 bits dans le même fichier il m'affiche que les 8 premiers bits par exemple pour D8 A8 il m'affiche 216 uniquement.

  16. #16
    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
    Essaye d'utiliser wcout au lieu de cout.
    Es-tu bien sûr que ton éditeur dans lequel tu veux vérifier le résultat supporte bien l'UNICODE?

  17. #17
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Attention, avoir un wiostream ne signifie pas que le fichier lui-même est en unicode.
    Il me semble qu'il faut régler le stream pour cela...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    Inactif
    Inscrit en
    Novembre 2007
    Messages
    369
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 369
    Par défaut
    j'ai essayé wcout elle donne le même résultat.
    comment reglé le stream?

  19. #19
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Je crois qu'il y a une fonction appelée imbue.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/03/2015, 14h58
  2. Format décimal dans les fichiers XML
    Par wozzz dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 31/05/2006, 09h18
  3. [JAR] Comment écrire dans un fichier properties dans un jar
    Par Alec6 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 05/10/2004, 15h16
  4. [FileWriter] écrire à la suite dans un fichier.
    Par LoLoSS dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 24/06/2004, 14h56
  5. Réponses: 1
    Dernier message: 06/03/2003, 11h57

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