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 :

Comment placer des bytes null dans un tableau de byte


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Comment placer des bytes null dans un tableau de byte
    Bonjour a tous,

    Je ne suis pas expert C++ et je suis un peu bloqué sur un ptit probleme. Je developpe actuellement la partie client d'une comm. Client/Serveur en C++/QT. Le serveur est est en Java et on s'envoie des integers (entre autres...). Je decompose chacun des mes integers en 4 bytes de cette facon la (je suis pas sur que ce soit deja lla bonne m'enfin ... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for (int i=0 ; i<4 ; i++)
    	{
    		puissance = pow((float)2, 8*(3-i));
    		int temp = IntToSend / (puissance);
    		byte[i] = temp;
    		byte[i] = byte[i] & 0xff;
     
     
    		IntToSend -= temp * puissance;
     
     
    }
    OK, bon cest ptet pas tres propre mais ca fonctionne plutot bien sauf que : quand je veux envoyer 0 (ou 128, ou 256, ou 1024, etc..) jai un byte null (en fait les 4 sont null). Et du coup a larrivée, mon tableau de byte est vide (il me donne une size = 4 mais la valeur est ""). Question : connaissez vous lastuce pour eviter ca ? Jai bien essaye de rajouter 1 a chaque octet et de les soustraire a la reception mais le probleme se pose a lors pour les valeurs comme -1, 127, 255, etc.. Bref, cest pas bon ! Une ptit idée serait la bienvenue...

    Merci

    Stephane

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 107
    Points : 122
    Points
    122
    Par défaut
    essaie ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main()
    {
      int entier = 8+512;
      for (int i = 0; i<4; i++, entier = entier>>8)
      {
        std::cout << (entier & 0xff) << std::endl;
      }
      return 0;
    }

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 107
    Points : 122
    Points
    122
    Par défaut
    au passage fais bien attention à tes tailles de variables, ou l'ordre des bytes.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Je vois ce que tu veux dire lemmel, finallement, ca revient en gros a ce que je fais (cest vrai que cest plus propre), mais la question n'est pas la : Jai pitet oublié de preciser que jutilise les classes de QT pour manipuler mes bytes avec un QByteArray byte;

    En gros quand tu execute ce code, les byte dont le dividende (je crois que cest le terme) de la division entiere par 8 est zéro prennent alors la valeur du caractere ASCII Nul (normal).. Mais le probleme, cest que ces bytes ne 'comptent' pas dans le tableau final : pire, cest considéré comme un byte de fin de tableau, ce qui fait que tout ce que je mets ensuite dedans nest pas pris en compte.. Peut etre que cest simplement QT qui interprete ces bytes NUL de cette facon et peut etre connaissez vous une autre facon de mettre les 4 octets dun entier dans un tableau sans avoir a se soucier de ce fameux byte..

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 107
    Points : 122
    Points
    122
    Par défaut
    ici http://qt.developpez.com/doc/4.3/qbytearray/#details, je trouve
    A QByteArray can embed '\0' bytes. The size() function always returns the size of the whole array, including embedded '\0' bytes. If you want to obtain the length of the data up to and excluding the first '\0' character, call qstrlen() on the byte array.
    donc tu dois te tromper dans tes manipulations.

    sinon tu peux utiliser des std::vector (mais je pense que ca changera rien à ton problème vu ce qu'il y a dans la doc).

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/05/2015, 23h36
  2. Réponses: 1
    Dernier message: 04/06/2010, 13h40
  3. comment placer des images en absolu dans un header
    Par ml1234 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 17/05/2009, 16h41
  4. [HTML] Se placer à une ligne précise dans un tableau
    Par seb55555 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 28/10/2004, 15h06
  5. Réponses: 4
    Dernier message: 11/06/2004, 10h21

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