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 :

souci de conversion des types variables


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2011
    Messages : 21
    Points : 12
    Points
    12
    Par défaut souci de conversion des types variables
    Bonjour,

    j’espère avoir de l'aide de votre part, mon cas est le suivant:
    je désire lire d'un fichier une série d'octets sous la forme hexadécimale

    --------------------------------------------------------------
    45 00 00 30 32 ee 40 00 80 06 4c e1 c0 a8 01 02 4b 7e 6d d0 ff
    --------------------------------------------------------------
    pour lire du fichier j'utilise ce bloc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char caractere;
    ifstream fichier("C:\\y\\y.txt"); 
     
     
     while(fichier.get(caractere))
    --------------------------------------
    la lecture se fait caractère par caractère
    je me trouve vers la fin avec mes données stocké dans une
    variable char,et je ne sais pas comment les convertir en u_char
    pour pouvoir les renvoyer à l'aide de ma variable U_CHAR packet[1548]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pcap_sendpacket(descripteur, packet, 1548)

    qu'elle est la bonne manière pour le faire ?
    Merci

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Bonjour,
    Un bête cast devrait faire l'affaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    packet[index] = static_cast< unsigned char >(caractere);
    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.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2011
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    un grand merci

  4. #4
    Membre à l'essai
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2011
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    pour tester:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while(fichier.get(caractere)) 
    	{
      packet[i] = static_cast< unsigned char >(caractere);
     
    	printf("%X",packet[i]);
    	i++;
    	}
    printf doit me sortir la valeur en hexadecimal des octets lus du fichier,or ca me sort une suite bizare:
    3435203030203030203330203332206565203430203030203830203036203463206531206330206138203031203032203462203765203664206430206666


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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Déjà, essaie "%02X", peut-être avec un espace en plus.
    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.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2011
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    je commence à voir ce qui se passe:

    la fonction de lecture lis le 1er caractère de mon fichier,et c'est le code ASCI de ce caractère qui est convertir en HEXADECIMAL:
    45 est le 1er octet sur mon fichier,le caractère 4 est lu par la fonction fichier.get(caractere)),ensuite le code ASCI de 4 qui est 52 est convertit en binaire donnant0011 0100)base2,(34)hex

  7. #7
    Membre à l'essai
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2011
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    est ce que j'aurais besoin de remplacer ma fonction de lecture de fichier par une autre fonction qui supporte une lectue en binaire??une fonction qui sait lire octet par octet ????

  8. #8
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Citation Envoyé par halil.zakaria Voir le message
    est ce que j'aurais besoin de remplacer ma fonction de lecture de fichier par une autre fonction qui supporte une lectue en binaire??une fonction qui sait lire octet par octet ????
    un ifstream permet de lire en binaire, il suffit de la préciser à l'ouverture du fichier; mais si ton fichier de données est écrit en mode "texte" et non binaire ça ne te sera probablement pas utile.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ifstream fichier("C:\\y\\y.txt", ios::in | ios::binary);
    Ici, un stringstream ne permettrait pas de récupérer les valeurs plus facilement ?

    edit: pas besoin de stringstream, j'avais oublié que fstream possède toutes les surchargent de l'opérateur >> suffisantes.
    On peut donc lire un unsigned int en base 16, puis le caster en unsigned char. (comme ça on à pas à prendre en compte les espaces, ni la "fabrication" des nombres à partir des caractères lus)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ifstream fi("./data");
    unsigned int ui;
    unsigned char data[42];
    int i=0;
     
    while(!fi.eof()) {
    	fi >> hex >> ui; // un nombre et pas un caractère
    	data[i] = static_cast<unsigned char>(ui);
     
    	// reconversion en int pour l'affichage
    	cout << "(0x" << hex << (int)data[i] << dec << ":" << (int)data[i] << ") ";
    	++i;
    }

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    BOnsoir,

    je ne comprends pas ce que tu veux comme résultat.

    ce 45 dans le fichier, en quoi doit-il être lu ? Que représente-t-il ?
    0x45 ?
    "45" ?
    45 ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2011
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Sympa comme blocage,j'en ai appris pas mal de concepts
    c'est ce dont j'avais besoin,Merci Iradielle

  11. #11
    Membre à l'essai
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2011
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    @BOUSK
    j'avais un fichier contenant des packets eh HEX déja capturé auparavant, ces derniers doivent etre rejoués (Replay attack) pour avoir un résultat du serveur.
    @Iradrille
    je savais pas que la conversion d'un entier(4octet) en un unsigned char (1 octet est possible)
    Merci à tous

  12. #12
    Membre à l'essai
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Août 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : Services de proximité

    Informations forums :
    Inscription : Août 2011
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    si mon fichier ne contient pas de separateur "espace" entre les octets ca fonctionne pas,est ce que c'est normale?

    ca fonctionne quand c'est sur cette forme:
    ----------------------------
    ee dd aa bb 02
    ----------------------------
    ça fonctionne pas quand c'est sur cette forme:
    ----------------------------
    eeddaabb02
    -------------------------------
    je veux juste une explication.

    Tachakkur(Merci); ce n'est pas une fonction ne vous inquiétez pas

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/11/2011, 16h57
  2. Réponses: 1
    Dernier message: 29/09/2009, 10h58
  3. conversion des types avec gtk+ et c++
    Par sabrinabest dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 12/09/2007, 18h58
  4. Equivalent C -> Delphi des types de variables
    Par jobe dans le forum Langage
    Réponses: 3
    Dernier message: 13/09/2005, 23h21

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