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

Langage Java Discussion :

manipulation de Byte, bit et int


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut manipulation de Byte, bit et int
    Bonjour,

    je travaille sur un decoder de paquet. je dois donc lire byte par byte le paquet et stocker les données dans les classes representant le protocole.

    Ma question est je dois lire les 4 premiers bit d'un byte. Comment je peux faire?
    Voila ce que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int aux=DecoderHelper.extractInteger(combined,offset,1); // transforme le byte en intier
    int Optional = (aux & 0x01);
    int Transitive = (aux & 0x01)>>>1;
    int Partial = (aux & 0x01)>>>2;
    int ExtendedLength = (aux & 0x01)>>>3;
    le resultat est que j'ai des zero partout Alors que la valeur du byte est 40, c est a dire 64 en decimal (valeur de aux) et en binaire ca fait 0100 0000
    donc le resultat devrait etre
    optional = 0; transitive = 1; partial = 0 et extendedLength = 0


    Merci de votre aide

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 75
    Par défaut
    Bonjour,

    Tu dois d'abord réaliser le décalage puis le masque : (aux>>1)&0x01
    (d'ailleurs j'utilise ">>" et non ">>>" et ça marche).

    Nil

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    j ai change le code comme tu me l'as conseillé mais j ai toujours mes quatre variables à zéro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    route.setOptional(aux & 0x01);
    route.setTransitive((aux>>1) & 0x01);
    route.setPartial((aux>>2) & 0x01);
    route.setExtendedLength((aux>>3)& 0x01);
    Quelle est la difference entre >> et >>> ?
    Et que signifie le 0&10 ?

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par Edta Voir le message
    j ai change le code comme tu me l'as conseillé mais j ai toujours mes quatre variables à zéro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    route.setOptional(aux & 0x01);
    route.setTransitive((aux>>1) & 0x01);
    route.setPartial((aux>>2) & 0x01);
    route.setExtendedLength((aux>>3)& 0x01);
    Quelle est la difference entre >> et >>> ?
    Et que signifie le 0&10 ?
    Normal, tu lis les 4 premiers bits, et non les 4 derniers. Tu dois donc faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    route.setOptional( ( aux >> 4 ) & 1 );
    route.setTransitive( ( aux >> 5 ) & 1 );
    route.setPartial( ( aux >> 6 ) & 1);
    route.setExtendedLength( ( aux >> 7 ) & 1);
    le "& 1" suffit, puisque "1" décimal vaut aussi "1" en hexa.
    "0x01" est la valeur hexadécimale "1" décimal. "&" permet de faire un "ET" binaire entre deux entiers.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2005
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 226
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Normal, tu lis les 4 premiers bits, et non les 4 derniers.
    ma question est bien de lire les quatre premiers bit.

    J'ai essayé de changer la valeur du 0x01 en 1 mais le resultat sont toujours des zero

  6. #6
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par Edta Voir le message
    ma question est bien de lire les quatre premiers bit.

    J'ai essayé de changer la valeur du 0x01 en 1 mais le resultat sont toujours des zero
    Ce n'est pas ce que tu dis dans ton premier post :

    Citation Envoyé par Edta Voir le message
    le resultat est que j'ai des zero partout Alors que la valeur du byte est 40, c est a dire 64 en decimal (valeur de aux) et en binaire ca fait 0100 0000
    donc le resultat devrait etre
    optional = 0; transitive = 1; partial = 0 et extendedLength = 0
    Pour la numérotation des bits, on compte de droite à gauche, du poids le plus faible au poids le plus fort :
    optional est le 8eme bit
    transitive le 7eme
    partial le 6eme
    extendedLength le 5eme.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par Edta Voir le message
    Quelle est la difference entre >> et >>> ?
    (je n'avais pas vu cette question )

    ">>" décale les bits à droite en conservant le signe.
    ">>>" décale les bits à droite, ainsi que le signe. Cet opérateur modifiera le signe d'un entier négatif.
    Le signe est porté par le bit de poids le plus fort.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ca doit etre la surchauffe: manipuler des byte
    Par TheCaribouX dans le forum C#
    Réponses: 12
    Dernier message: 09/04/2008, 11h37
  2. Manipulation d'un bit sur un entier
    Par SybVicious dans le forum Débuter
    Réponses: 20
    Dernier message: 30/07/2007, 23h31
  3. Conversion d'un byte[] vers un int[]
    Par ludosoft dans le forum Langage
    Réponses: 10
    Dernier message: 11/01/2007, 16h10
  4. Manipulations sur les bits
    Par ThE_LaSt dans le forum C
    Réponses: 23
    Dernier message: 27/03/2006, 14h22
  5. bits,bytes,bit word ?
    Par Battosaiii dans le forum C
    Réponses: 2
    Dernier message: 17/03/2006, 11h29

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