Hexadecimal para String

1 resposta
V

Galera,

Seguinte, estou tendo que fazer uma aplicacao que converta hexadecimal em String. Em java e muito simples ate que chega nos seguintes valores: \u0001 ate \u0019 esta sendo representado por caracteres invalidos. E a minha aplicacao pode receber \u0001 onde ele representa o 1 mesmo sem ser \u0031 onde o 31 representa o numero 1 em hexadecimal.

Esse valor hexadecimal esta vindo de um equipamento que conecta com o meu socket. Nesse pacote em hexadecimal pode haver uma ou mais informacoes.

Resumindo, estou perdido nessa parte de hexadecimal para String ou inteiro

Espero uma ajuda de voces.

Abaixo o codigo que estou usando

package com.teste;

import java.io.UnsupportedEncodingException;

public class StringConverter {
	public static void printBytes(byte[] array, String name) {
	    for (int k = 0; k < array.length; k++) {
	      System.out.println(name + "[" + k + "] = " + "0x"
	          + UnicodeFormatter.byteToHex(array[k]));
	    }
	  }

	  public static void main(String[] args) {

	    System.out.println(System.getProperty("file.encoding"));
	    String original = new String("A" + "\u00A2" + "\u0019" + "\u00fc" + "C");

	    System.out.println("original = " + original);
	    System.out.println();

	    try {
	      byte[] utf8Bytes = original.getBytes("UTF8");
	      byte[] defaultBytes = original.getBytes();

	      String roundTrip = new String(utf8Bytes, "UTF8");
	      System.out.println("roundTrip = " + roundTrip);

	      System.out.println();
	      printBytes(utf8Bytes, "utf8Bytes");
	      System.out.println();
	      printBytes(defaultBytes, "defaultBytes");
	    } catch (UnsupportedEncodingException e) {
	      e.printStackTrace();
	    }
	  }
}
package com.teste;

public class UnicodeFormatter {
	static public String byteToHex(byte b) {
	    // Returns hex String representation of byte b
	    char hexDigit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a',
	        'b', 'c', 'd', 'e', 'f' };
	    char[] array = { hexDigit[(b >> 4) & 0x0f], hexDigit[b & 0x0f] };
	    return new String(array);
	  }

	  static public String charToHex(char c) {
	    // Returns hex String representation of char c
	    byte hi = (byte) (c >>> 8);
	    byte lo = (byte) (c & 0xff);
	    return byteToHex(hi) + byteToHex(lo);
	  }
}

1 Resposta

ViniGodoy

Esse equipamento provavelmente tem um protocolo binário, e esse \u0001 deve significar alguma coisa. Consulte o manual do equipamento.

Uma boa também é usar o wireshark para verificar byte-a-byte o que é trafegado pela rede.

Criado 20 de janeiro de 2010
Ultima resposta 25 de jan. de 2010
Respostas 1
Participantes 2