Estou com o pequeno problema.
Possuia um código em pascal que realizava uma soma circular entre dois bytes. Limites 1 e 255.
Por exemplo:
250 + 10 = 5
255 + 5 = 5
255 + 10 = 10
Utilizava como simples criptografia. Portei para o Java.
O problema é que com um arquivo de texto, utilizando char, funciona normalmente, mas com arquivos binários não fica legal.
Pude reparar através de alguns testes o seguinte comportamento:
Jogo o conteúdo de um arquivo de texto em um byte[]
ao passar o byte[] para o metodo juntamente com outro byte[] que é a chave, o texto bagunça os acentos.
Na tabela ascii, por exemplo, o ‘á’ é 255.
Mas no java acontece isso:
(byte) ‘á’ = -31
(char) -31 = ‘£’
Tentei delimitar a soma entre 1 e 127, mas alguns caracteres, quando colocados em um byte[], ficam negativos.
Você precisa ler sobre o uso de caracteres em Java. Devido à sua característica multiplataforma, Java representa caracteres na codificação UTF-16. Assim, o tipo char possui 16 bits, e não 8 bits. Ao forçar a conversão char -> byte você passa para o byte somente os 8 primeiros bits do char e nesse processo você perdeu informação. Além do mais, o intervalo de valores do tipo byte é -128 a 127. O único tipo sem sinal é char. Em Java, esqueça ASCII.
Um detalhe que eu havia me esquecido de mencionar … qualquer expressão envolvendo tipos inteiros, mesmo que sejam os menores, é convertida automaticamente para int. Por exemplo:
byte a = 10, b = 20;
int c = a + b; //a expressão a + b é do tipo int
byte d = (byte) a + b; //para atribuir a soma para outro byte precisa de coerção explícita
acho que se usa ASCII, em java, quando usamos eventos de teclado, por exemplo. já vi e usei programas que usam o enter, o espaço, e outras, através da tabela ASCII