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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top