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 : 41
    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 : 51
    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 : 36
    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 296
    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 296
    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