Converter char em int

10 respostas
lucas.cs

Recebo uma mensagem pelo Socket usando esse código

entrada = new BufferedReader(new InputStreamReader(socket.getInputStream()));

depois faço um while com o read();

os dois primeiros caracteres da mensagem são em hexadecimal e o read() me retorna os valores em char.

ex:
recebo 008C em hexa e em char fica 65333 que na verdade é 140

os outros valores da mensagem é geralmente apenas um caractere em char fica 48(0), 53(5) e ai monto minha mensagem.

porém preciso usar os dois bytes iniciais para calcular o tamanho da mensagem e preciso saber o real tamanho deles.

conto com o auxílio de vocês nesta etapa.

abraços.

10 Respostas

leoviniga

Opa…posta sua dúvida em Java Avançado…lá provavelmente você vai receber um retorno melhor sobre a sua dúvida ^^

lucas.cs

obrigado.

ViniGodoy

Leia um byte e use o operador de shift para gerar o número final. Mais ou menos assim:

int tamanho = reader.read(); tamanho = (tamanho << 8) & reader.read();

Se você tentar trabalhar com sockets sem entender manipulação de bits, estará morto.

lucas.cs

ViniGodoy:
Leia um byte e use o operador de shift para gerar o número final. Mais ou menos assim:

int tamanho = reader.read(); tamanho = (tamanho << 8) & reader.read();

Se você tentar trabalhar com sockets sem entender manipulação de bits, estará morto.

morto já estou pois estou com o projeto na minha mão e tenho que entregar essa semana.

mais muito obrigado pela dica, vou tentar aplicar no meu projeto.

um grande abraço.

lucas.cs
ViniGodoy:
Leia um byte e use o operador de shift para gerar o número final. Mais ou menos assim:
int tamanho = reader.read();
tamanho = (tamanho << 8) & reader.read();

Se você tentar trabalhar com sockets sem entender manipulação de bits, estará morto.

o tamanho da mensagem eu pego com esse fragmento

while((x = entrada.read()) != -1) {


}

porém a conexão é contínua, ou seja preciso realmente calcular os dois bytes iniciais para liberar a thread e aguardar por uma nova mensagem, se eu calculo errôneamente a aplicação fica aguardando completar a mensagem e ai pega parte da outra que é enviada.

ViniGodoy

Dê uma olhada se esse post te ilumina.


E veja também se o chat que tem no link que esse post indica te ilumina.

Esse while está errado. Com um while assim, vc irá ler dados até que o socket feche a conexão.

lucas.cs

ViniGodoy:
Dê uma olhada se esse post te ilumina.

E veja também se o chat que tem no link que esse post indica te ilumina.

Esse while está errado. Com um while assim, vc irá ler dados até que o socket feche a conexão.

obrigado pela nova dica, mais infelizmente tenho que manter a conexão ativa full time com o client, ele me envia mensagens em ISO8583 uma seguida da outra, abre a conexão em um determinado horário e fica monitorando a mesma de 5 em 5 minutos enviando mensagens de sonda.

lucas.cs

sobre a dúvida inicial de converte char para int alguém pode me ajudar?

ViniGodoy

E quem foi que falou em fechar a conexão?

Numa conexão TCP, nunca se fecha a conexão, pelo menos, não antes de uma mensagem específica para isso.
O exemplo de chat simples TCP no link que eu te passei também não fecha.

Eu só disse que você não deve ler um int dessa forma.

lucas.cs

ViniGodoy:
E quem foi que falou em fechar a conexão?

Numa conexão TCP, nunca se fecha a conexão, pelo menos, não antes de uma mensagem específica para isso.
O exemplo de chat simples TCP no link que eu te passei também não fecha.

Eu só disse que você não deve ler um int dessa forma.

entendi, vou analisar uma alternativa então.

Criado 24 de maio de 2011
Ultima resposta 24 de mai. de 2011
Respostas 10
Participantes 3