Como posso transformar um int em três bytes em Java?
-
06-07-2019 - |
Pergunta
Eu estou tentando converter um int
em três bytes
representando que int
(big endian).
Eu tenho certeza que ele tem algo a ver com bit-wise e e pouco deslocamento. Mas eu não tenho nenhuma idéia de como proceder para fazê-lo.
Por exemplo:
int myInt;
// some code
byte b1, b2 , b3; // b1 is most significant, then b2 then b3.
* Nota, estou ciente de que um int é de 4 bytes e os três bytes tem uma chance de mais / underflowing.
Solução
Para obter o byte menos significativo:
b3 = myInt & 0xFF;
O segundo byte menos significativo:
b2 = (myInt >> 8) & 0xFF;
E o terceiro byte menos significativo:
b1 = (myInt >> 16) & 0xFF;
Explicação:
Bitwise AND um valor com 0xFF (11111111 em binário) retornará os 8 bits menos significativos (bits 0 a 7), em que número. Deslocando o número à direita 8 vezes coloca os bits de 8 a 15, nas posições de bit de 0 a 7 de modo AND com 0xFF irá devolver o segundo byte. Da mesma forma, mudando o número à direita 16 vezes coloca os pedaços 16 a 23 em posições de bit 0 a 7 por isso AND com 0xFF retorna o terceiro byte.
Outras dicas
byte b1 = (myint >> 16) & 0xff;
byte b2 = (myint >> 8) & 0xff;
byte b3 = myint & 0xff;
Não tenho a certeza como este holfds em java, porém, eu não AAM um java dev
Um int não se encaixa em 3 bytes. No entanto, supondo que você sabe que esses queridos particulares fazer:
byte b1 = (myInt & 0xff);
myInt >>= 8;
byte b2 = (myInt & 0xff);
myInt >>= 8;
byte b3 = (myInt & 0xff);
Em 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);
saídas 0 0 1