Codificação ASC extendido para campo IP

7 respostas
T

Oi gente… abri um tópico acerca de conversão para ascII extendido mas não consegui algo concreto. Tipo, entro com um IP(tipo 10.1.1.1, 255.255.255.0 por exemplo) e preciso exportar para um txt em formato ascII(extendido se necessário ou não).

Pego o conteúdo e tiro os pontos usando um tokenizer e consigo cada número separado nas minhas conversões.

Na hora q eu jogo no arquivo um range de conversões alguns são possíveis e outros não…devido a varias variáveis como Sistema Operacional entre outros…codificação etc… meu método de impressão é:

PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(pathFile, true), “Windows-1252”)));

Gente não é folga da minha parte… mas andei procurando e não achei nada… queria mto algo que eu entrasse com um inteiro ou string… que me devolvesse o correspendente em asc extendido… se eu uso char fiko limitado até 128.

tentei usar: new Character((char)137).toString()

ele funciona… mas nem pra todos os valores…alguns caracteres meu windows não reconhece aí ele coloca “?” no arquivo… ferrando minha aplicação.

Alguém tem alguma carta na manga…??to batutando mto neste assunto mas não to consguindo mais andar…

Valeu pela atenção gente!

7 Respostas

E

Use um FileOutputStream e grave os bytes. Não tente gravar os caracteres de 128 até 255 como caracteres, que vai dar problemas.

T

Gravando em byte volto para o mesmo problema!

E

Vou explicar direitinho, que parece que você não está entendendo.

Em Java, bytes NÃO SÃO CARACTERES.
Não são, não são e não são.
Caracteres são coisas completamente diferentes. Para começar, o Java sempre usa 2 bytes para representar um caracter.
Se quer trabalhar com bytes, você precisa usar os métodos adequados para trabalhar com bytes.
Toda vez que você tenta converter um byte para um caracter e esse caracter não é imprimível (e isso, obviamente, depende do “encoding” usado, o que é mais perturbador), o Java converte-o para o caracter “?” e isso não tem volta.

Por que é que você precisa representar um IP como 4 bytes? Se você precisar economizar espaço, eu recomendaria converter para hexadecimal (2 caracteres por byte - não se esqueça de pôr zeros à esquerda se o byte estiver entre 0 e 15). Por exemplo:

10.1.1.1 -> 0A010101

255.255.255.0 -> FFFFFF00

208.109.100.149 -> D06D6495

Você gasta 8 caracteres (em vez de 4 bytes) mas a codificação não tem problemas para ser gravada em um arquivo-texto.

T

OK, então se eu usar:

Integer i = 300;
byte b = Integer.byteValue();

Porém meu arquivo precisa da informação em símbolos… entende? não é nem em hexa e nem em inteiro…

E

Cuidado - escrever 0s binários em um arquivo é sinal que várias linguagens (como o C e o C++) não vão conseguir entender direito esse arquivo. Isso pode ocorrer, por exemplo, para o caso 127.0.0.1 .

T

Vai rodar sempre em windows…apenas esse é o requisito… nao tem problema?

E

Claro que tem. Não grave zeros binários em um arquivo texto, isso dá problemas em qualquer sistema operacional. É porque isso dá problemas com a linguagem que lê o arquivo, não com o sistema operacional. Normalmente programas em C têm problemas ao ler arquivos-textos com zeros binários incorporados.

Criado 13 de janeiro de 2010
Ultima resposta 13 de jan. de 2010
Respostas 7
Participantes 2