Galera estou com uma duvida que não consigo solucionar, assim vou mostrar todo o contesto:
Tenho uma aplicação que se comunica via socket, utilizando um protocolo criado por nós para comunicação, porém, o mesmo foi enxugado para melhor o desempenho no envio e recebimento dos dados binários. Ate aqui tudo ok
Porém, existe algumas coisas em C que não consigo fazer em Java. Tipo:
C: int = 2 bytes
Java: int = 4 bytes
OBS: Esse eu consigo converter para dois bytes utilizando essa regra:
Trasformar em 2 bytes
byte[] bytes = new byte[2];
bytes[0] = (byte)('O inteiro' & 0xFF);
bytes[1] = (byte)(('O inteiro' >> 8) & 0xFF);
Resultado byte[2] que é o inteiro em C.
Código para o inverso
public int getInt( int indice ) {
int i_aux1 = bytes[indice];
int i_aux2 = bytes[indice+1];
//..soma 256 pois nao existe unsigned no java
if( i_aux1 < 0 )
i_aux1 += 256;
//..soma 256 pois nao existe unsigned no java
if( i_aux2 < 0 )
i_aux2 += 256;
int result = i_aux1 + i_aux2*256;
return result;
}
A mesma coisa para um Long aumentando a quantidade de byte para 4 e os valores 16 e 32
Mas meu maior desafio é conseguir colocar dentro de um char, 8 bits em binário, pois, em C um char = 1 byte = 8 bits, assim, teria condições de colocar um valor de 00 a 99 dentro de um char, como a liguagem C faz, sem nenhum problema.
Gostaria de uma forçinha quanto a isso …