Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de conversion : int ->char[4]

Sujet résolu
    15 avril 2008 à 17:31:57

    Bonjour

    Afin de pouvoir transmettre un int correctement dans une trame je le decoupe en 4 et je le stocke dans un tableah de caractere via cette fonction :

    void entier_caractere(int i,unsigned char *buffer){
    buffer[0]=(unsigned char)((i>>24)&0xff);   
    buffer[1]=(unsigned char)((i>>16)&0xff);
    buffer[2]=(unsigned char)((i>>8)&0xff);
    buffer[3]=(unsigned char)((i>>0)&0xff);
    


    Si l'entier est <=127 ca passe s'il est supérieur a 256 ca marche aussi
    mais si j'ai entre 128 et 255 (soit le premier bit a 1) ca deconne et mon buffer[3] s'affichae sous la forme ff ff ff 80 au lieu de 80(h).

    Bref ca pourrait venir d'ou ?

    PS : pour l'affichage je transcrit le tableau d'unsigned char en char mais meme quand je recupere les valeur cote serveur ca marche pas donc je pense pas qe ca vienne de la...
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      15 avril 2008 à 17:34:17

      Je ne sais pas, mais il y a bien plus simple pour récupérer un int byte par byte:
      #define byte(intvar, pos) (((unsigned char*) &intvar)[pos])
      
      • Partager sur Facebook
      • Partager sur Twitter
        15 avril 2008 à 17:50:19

        Sauf que les macros c'est le mal...
        • Partager sur Facebook
        • Partager sur Twitter
        Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
          15 avril 2008 à 18:26:43

          Perso ma méthode me convient moi ce que j'aimerais comprendre c'est pourquoi ca marche pas ...

          Bon je sais pas trop comment ca se fait mais ca marche ... :euh:
          • Partager sur Facebook
          • Partager sur Twitter
            16 avril 2008 à 15:24:18

            lis ca, c'est tres interressant (et ca vient de boost::lexical_cast) -> http://www.gotw.ca/publications/mill19.htm
            • Partager sur Facebook
            • Partager sur Twitter
              25 avril 2008 à 23:45:18

              Citation : walfrat

              Perso ma méthode me convient moi ce que j'aimerais comprendre c'est pourquoi ca marche pas ...

              Bon je sais pas trop comment ca se fait mais ca marche ... :euh:


              C'est parce que le type de i est signé. Á mon avis le plus simple ce serait d'appeler une fonction de copie pour copier l'int dans le buffer. Fais attention à l'endianness des données.
              • Partager sur Facebook
              • Partager sur Twitter

              Probleme de conversion : int ->char[4]

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown