Question

J'essaie de convertir un int en trois octets représentant ce int (big endian).

Je suis sûr que cela a quelque chose à voir avec les changements de bits. Mais je ne sais pas comment faire.

Par exemple:

int myInt;

// some code

byte b1, b2 , b3; // b1 is most significant, then b2 then b3.

* Notez que je suis conscient qu'un int est de 4 octets et que les trois octets ont une chance de déborder / déborder.

Était-ce utile?

La solution

Pour obtenir l'octet le moins significatif:

b3 = myInt & 0xFF;

Le deuxième octet le moins significatif:

b2 = (myInt >> 8) & 0xFF;

Et le 3ème octet le moins significatif:

b1 = (myInt >> 16) & 0xFF;

Explication:

ANDing au niveau du bit Une valeur avec 0xFF (11111111 en binaire) renvoie les 8 bits les moins significatifs (bits 0 à 7) de ce nombre. En décalant le numéro 8 à droite, les bits 8 à 15 sont placés dans les positions 0 à 7 de sorte que ANDing avec 0xFF renvoie le deuxième octet. De la même façon, décaler le numéro 16 fois à droite place les bits 16 à 23 dans les positions de bits 0 à 7; ainsi, ANDing avec 0xFF renvoie le troisième octet.

Autres conseils

byte b1 = (myint >> 16) & 0xff;
byte b2 = (myint >> 8) & 0xff;
byte b3 = myint & 0xff;

Je ne suis pas sûr de savoir comment cela se passe en Java, mais je ne suis pas un développeur Java

Un int ne rentre pas dans 3 octets. Cependant, à supposer que vous sachiez ce que ceux-ci font:

   byte b1 = (myInt & 0xff);
   myInt >>= 8;
   byte b2 = (myInt & 0xff);
   myInt >>= 8;
   byte b3 = (myInt & 0xff);

En Java

int myInt = 1;
byte b1,b2,b3;
b3 = (byte)(myInt & 0xFF);
b2 = (byte)((myInt >> 8) & 0xFF);
b1 = (byte)((myInt >> 16) & 0xFF);
System.out.println(b1+" "+b2+" "+b3);

sorties 0 0 1

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top