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 :

ecrire en hexa dans la memoire


Sujet :

C++

  1. #1
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut ecrire en hexa dans la memoire
    depart: une valeur int
    arrivé: valeur hexa dans la memoire sur 4 bytes

    ex. depart 41
    ex. arrivée 00 00 00 29

    j arrive toujours avec: ex 32 39 00 00
    qui correspond à '2' '9'

    j arrive a convertir en hexa avec soit std:hex ou sprintf, mais je sais pas comment ecrire directement ces valeurs sur 4 bytes dans mon buffer (char *).

    comment faire ?

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Pas la peine de faire la moindre conversion, décimal ou hexadécimal ne sont que des représentations pour un même nombre ; quoiqu'il arrive dans la machine ton nombre ne sera qu'une succession de 0 et de 1.

    Si tu veux faire quelque chose de propre (ie. qui tienne compte de l'endianness) tu dois décomposer ton entier en 4 octets via les opérateurs bit à bit, puis les écrire dans ton buffer dans le bon ordre.

    Si tu te fous de l'endianness, tu peux faire une copie barbare directe de ton entier dans ton buffer avec un reinterpret_cast.

  3. #3
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    euh...

    je vais devoir sortir mes data en Little Endian.

    c est possible d avoir un tout piti example STP ? je touche pas là

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Je sais jamais laquel est little, lequel est big, ni toutes les autres conventions possibles, je te laisse donc voir... L'idée est d'écrire ainsi :

    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
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        int value = 4154162;
        unsigned char buffer[4]; // On suppose des sizeof(int) == 4;
        buffer[3] = value & 0xff;
        value = value >> 8;
        buffer[2] = value & 0xff;
        value = value >> 8;
        buffer[1] = value & 0xff;
        value = value >> 8;
        buffer[0] = value & 0xff;
        for (int i = 0 ; i<4 ; ++i)
        {
            cout << showbase << hex << (unsigned int)(buffer[i]) << " ";
        }
    }
    Suivant l'endianness, peut-être (probablement) que les index de buffer viendront dans un autre ordre.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre expérimenté
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Par défaut
    Little Endian c'est lorsque l'octet du poids le plus fort (le plus à gauche dans la représentation hexa) est enregistré à l'adresse mémoire la plus petite (premier élément du tableau).

    Donc normalement le code donné plus haut par JolyLoic est déjà en Little endian.

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    ex. depart 41
    ex. arrivée 00 00 00 29
    Ça, c'est du Big Endian.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 80
    Par défaut
    je pense que vous vous fait un peu chier il y a une petite fonction qui est bien clest itoa (integer to ascii) (int nombre,char chaine,int base) la base est decimal ou hexacedimal ou celle que vous voulez qui est 16

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    int depar;
    char final[4]{'0'};
    itoa(depar,final,16);
    // fini !!
    le seul problem c'est pour les 00 sur les octets nuls !! c'est fesable avec strcat enfin fait marcher votre imagination

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    C'est pas sous forme de chaîne qu'il veut mais un buffer qui contient les données.
    Le plus simple c'est d'utiliser htonl si c'est effectivement du big endian qu'il veut.

  9. #9
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 287
    Par défaut
    Citation Envoyé par Stany
    je pense que vous vous fait un peu chier il y a une petite fonction qui est bien clest itoa (integer to ascii)
    Parenthèse (car de toutes façons, cela ne répond pas à la question posée comme l'a signalé Loufoque). itoa n'existe pas en C. Il s'agit d'un ajout propriétaire spécifique à je ne sais plus trop quelle plateforme.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  10. #10
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    C'est de Borland je crois.

Discussions similaires

  1. ecrire dans la memoire du telephone portable avec python
    Par aksegaly dans le forum Bibliothèques tierces
    Réponses: 4
    Dernier message: 19/10/2009, 12h15
  2. ecrire en hexa dans un fichier : pour le BOM d'un fichier UTF8
    Par italiasky dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 20/10/2008, 18h50
  3. Ecrire du texte dans les fenetres filles (MDI)
    Par trilomdor dans le forum MFC
    Réponses: 9
    Dernier message: 23/06/2004, 17h00
  4. [MFC]Ecrire du texte dans un rectangle
    Par zaz16 dans le forum MFC
    Réponses: 8
    Dernier message: 29/07/2003, 10h31
  5. comment ecrire du texte dans une window application
    Par gaut dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 16/07/2003, 10h23

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