[Java] Comment déterminer la valeur de chaque bit d'un byte ?

Comment déterminer la valeur de chaque bit d'un byte ? [Java] - Java - Programmation

Marsh Posté le 22-02-2004 à 02:17:34    

Bonjour à tous :)
 
Je me galère un peu sur un truc qui semble pourtant tout con.
 
En Java, le type byte est signé et va donc de -128 à 127.
Là je fais une appli qui récupère des données sur le port série. On a défini un format de trame (les trames font 20 bits et sont donc contenues dans 3 bytes). Je dois pouvoir déterminer la valeur de chaque bit de chaque byte (octet).
 
Et c là que ca se complique. Tant que je reçois des bytes dont le bit de poids le plus fort est à 0, ca ne pose pas de prbl (de 0 à 127 donc). Mais si ce dernier bit est à 1, je ne sais pas comment va se comporter java. En clair, si la valeur de l'octet est "1011 0111" par exemple, quelle sera la valeur en base 10 ? (sachant que ca ne peut pas être 183 puisqu'il faut tenir compte des négatifs).
 
J'ai voulu faire des tests pour comprendre comment ca se passait :

Code :
  1. byte tt =  (byte) -20;
  2. String tempS = Integer.toBinaryString(tt);


 
Et dans ce cas il code -20 sur 4 bytes au lieu d'un seul ! (alors que si je met un nombre compris entre 0 et 127 il le code bien sur un byte).
 
 
Pour résumer le tout (c peut être un peu confu mais g fais du mieux que g pu) : comment déterminer la valeur de chaque bit d'un byte ?
 
merci d'avance :)

Reply

Marsh Posté le 22-02-2004 à 02:17:34   

Reply

Marsh Posté le 22-02-2004 à 02:25:15    

<benou>tu t'en sors pas à coup de & 0x00000001, & 0x00000010, etc ...<benou>


Message édité par the real moins moins le 22-02-2004 à 02:25:42
Reply

Marsh Posté le 22-02-2004 à 02:35:08    

euh, je ne te suis pas trop, si cette solution permet de donner une valeur directement en binaire à mon byte ca m'irait pas mal, mais je ne comprends pas d'où sort le "&" ? Ca me donne du "illegal start of expression".

Reply

Marsh Posté le 22-02-2004 à 02:41:02    

c'est le & binbaire
 
faut faire comme ca :
 

Code :
  1. byte b = ....;
  2. if (b & 0x00000001 == 0x00000001) {
  3.    // le byte de poid faible est a 1
  4. }

Reply

Marsh Posté le 22-02-2004 à 02:56:57    

:sol:


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 22-02-2004 à 02:57:56    

ah ok ! je vois, merci :)
Mais le 0x c pas seulement pour la notation en hexa ?
 
Et du coup, une autre question, comment puis-je construire mon byte "bit par bit". Je sais que si je donne la valeur 127 a mon byte, les 8 bits auront les valeurs suivantes : 0111 1111. Mais si je veux veux écrire dedans : 1111 1111, comment je fais ? ;) Doit y avoir qque chose qui m'échappe...
 
encore merci
 

Reply

Marsh Posté le 22-02-2004 à 02:58:35    

il est saoul benou :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 22-02-2004 à 03:03:03    

Jerome a écrit :


Mais le 0x c pas seulement pour la notation en hexa ?


si c'est vrai, t'as raison  :sweat:

Reply

Marsh Posté le 22-02-2004 à 03:05:09    

c ce qu'il me semblait, et g l'impression qu'on ne peut pas entrer directement une valeur en binaire, du coup, jsais pas comment faire ;) Si qqun a une idée...

Reply

Marsh Posté le 22-02-2004 à 16:44:47    

Jerome a écrit :

c ce qu'il me semblait, et g l'impression qu'on ne peut pas entrer directement une valeur en binaire, du coup, jsais pas comment faire ;) Si qqun a une idée...


ben tu la rentre en hexa, ca revient au même ...
 

Code :
  1. byte b = (byte) 156;
  2.  if ((b & 0x01) == 0x01) {
  3.   System.out.println("le byte de poid faible est a 1" );
  4.  } else {
  5.   System.out.println("le byte de poid faible est a 0" );
  6.  }
  7.  if ((b & 0x80) == 0x80) {
  8.   System.out.println("le byte de poid fort est a 1" );
  9.  } else {
  10.   System.out.println("le byte de poid fort est a 0" );
  11.  }


(ce coup ci j'ai testé ;))

Reply

Marsh Posté le 22-02-2004 à 16:44:47   

Reply

Marsh Posté le 22-02-2004 à 17:51:01    

yep, ca marche, merci bien :)
 
En fait je me prenais la tete pour pas grand chose, c t normal que la méthode Integer.toBinaryString() m'affiche 4 bytes (car Integer forcément ;) ).
 
Une autre question donc, est-il possible de donner une valeur à un byte en Java en lui passant la valeur de chaque bits ? ou alors suis-je obligé je passer par un tableau de 8 caractères(représentant mon byte), le parcourir et calculer la valeur de mon byte correspondant ?

Reply

Marsh Posté le 22-02-2004 à 19:52:34    

va toujours voir du coté de BitSet mais bon...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed