Tipo de byte em java

13 respostas
oitathi

Eu tô com um problema eu tenho um arquivo q está numa extensão .map. Eu quero ler cada byte deste arquivo, o que acontece é que o tipo byte em java é estranho, vai de -127 a 128, e eu preciso que ele leia de 0 à 256. Alguém sabe como???
Obrigada!!!

public  byte readByteLine (RandomAccessFile fis) throws IOException {
     byte thisByte = (byte)fis.read();     
     while(thisByte<128){
         System.out.println(thisByte);
         thisByte= (byte)fis.read();   
    }//esse laço nunca vai acabar pq nunca vai der tum byte maior do que 128 em java... porém meu arquivo conta os bytes de 0 até 256...
}

13 Respostas

allancmm

Olha, vc pode usar short, mas ele vai de -256 a 255, ou vc pode usar char que vai de 0 a 65536. Ai eh soh refinar a logica do programa.

oitathi

vc poderia dar uma exemplificada no tipo char???
teria q fazer um cast, ou alguma coisa do tipo?

allancmm

o tipo char eh um tipo inteiro meio disfarçado, vc pode usá-lo normalmente, como int. A diferença eh que ele “tambem” referencia os caracteres Unicodes. Ixxi, acho que ficou meio confuso essa minha explicacao, mas qlq coisa posta ai.

oitathi

é ficou um pouco… fiz assim:

public void readCharLine(RandomAccessFile fis) throws IOException {
        char thisChar = (char) fis.read();
        while (thisChar < 128) {
            System.out.println(thisChar);
            thisChar = (char) fis.read();
        }
    }

Mas eu tô lendo os caracteres e não os numeros…

allancmm

oitathi:
é ficou um pouco… fiz assim:

public void readCharLine(RandomAccessFile fis) throws IOException {
        char thisChar = (char) fis.read();
        while (thisChar < 128) {
            System.out.println(thisChar);
            thisChar = (char) fis.read();
        }
    }

Mas eu tô lendo os caracteres e não os numeros…

tenta assim:

public void readCharLine(RandomAccessFile fis) throws IOException {
        char thisChar = (char) fis.read();
        while (thisChar < 128) {
            System.out.println((int)thisChar);
            thisChar = (char) fis.read();
        }
    }
oitathi

eh eu fiz isso…
cara, vc sabe se tem um jeito de eu ler isso em hexadecimal?

allancmm

Primeiro - nao deu certo como eu falei nao?

Segundo - lê em hexadecimal acho que nao dá nao, mas vc pode usar metodos especificos da classes Integer. Nao lembro qual(is).

oitathi

acho q nem deu certo… tá dando uma diferença… pelo programa XVI 123 que lê o arquivo em hexadecimal, o meu arquivo começa assim: 21 42 53 42 20 45 6C 65…
e em java tah começando assim: 33 66 83 66 32 69 108 101

oitathi

eu consegui assim:
[code]
public void readCharLine(RandomAccessFile fis) throws IOException {
char thisChar = (char) fis.read();
while (thisChar < 128) {
System.out.println(Integer.toHexString((int)thisChar));
thisChar = (char) fis.read();
}
}

allancmm

Vamos comecar de novo.

1 - Vc tem um arquivo onde está escritos numeros em hexadecimal?

2 - Caso sim, vc quer lê-los e printá-los na tela tambem em hexadecimal?

oitathi

não, o arquivo tah em binario…
eh q eu eusei um programa chamado xvi 132 que le qq arquivo em hex… ai queria conferir pra ver se tava dando a mesma coisa…
aparentemente tahj dando certo daquele jeito q vc falou… convertendo em char e depois um cast pra int…

allancmm

oitathi:
não, o arquivo tah em binario…
eh q eu eusei um programa chamado xvi 132 que le qq arquivo em hex… ai queria conferir pra ver se tava dando a mesma coisa…
aparentemente tahj dando certo daquele jeito q vc falou… convertendo em char e depois um cast pra int…

Entao funcionou ou nao?

Stormqueen1990

oitathi:
acho q nem deu certo… tá dando uma diferença… pelo programa XVI 123 que lê o arquivo em hexadecimal, o meu arquivo começa assim: 21 42 53 42 20 45 6C 65…
e em java tah começando assim: 33 66 83 66 32 69 108 101

Essa diferença se dá pelo fato de que o Java transformou o inteiro binário em inteiro decimal ao invés de hexa.
Mas os valores são correspondentes. Dá pra mudar de base numérica com métodos da classe Integer, se não me falha a memória.

Criado 2 de fevereiro de 2011
Ultima resposta 2 de fev. de 2011
Respostas 13
Participantes 3