Convertir hexadecimal a caracter imprimible

keko_chorro
24 de Febrero del 2006
Buenos dias,
tengo un problema y me gustaría saber si alguien puede ayudarme.

Os cuento como va el tema. Estoy haciendo una aplicación que recibe mensajes en hexadecimal. Estos mensajes tengo que desempaquetarlos de hexadecimal a caracter para saber que es lo que me han mandado.

Alguien sabe como hacer esto?

muchas gracias

beapsan
24 de Febrero del 2006
Sí, yo lo tengo también así; la solución es poner:
(char)nombrehex; así te escribe el carácter.

keko_chorro
24 de Febrero del 2006
muchas gracias, pero ya lo he resuelto. Me he creado una función que lo que hace es detectar los caracteres no imprimibles y pone su codigo hexadecimal entre parántesis.

Os dejo el código aqui por si a alguien le viene bien.

GRACIAS.

public static String cadenaLog(String stEmp){
//Declaramos los atributos locales
byte[] bytes;
byte b;
int entero;
boolean noImprimible = false;
char c;
String cadena = "";

try {
//Obtenemos los bytes de la cadena recibida
bytes = stEmp.getBytes("ISO8859_1");

//Analizamos cada byte para ver cual es imprimible y cual no
for (int i=0;i<bytes.length;i++){
b = bytes[i];
entero = (int) b;

//Si el número que obtenemos es negativo, lo recalculamos en funcion
//a los 256 caracteres del código ASCII
if (entero < 0) {
entero = entero + 256;
}

//Comprobamos que el byte obtenido sea un caracter imprimible
if ((entero<32)||(entero==127)){
//Comprobamos si ya hemos puesto el primer paréntesis
if (noImprimible){
//Si el digito obtenido es de una sola cifra, ponemos un cero por delante
if (entero<16){
cadena = cadena + "0";
}
cadena = cadena + Integer.toString(entero,16);
}else{
noImprimible = true;
//Si el digito obtenido es de una sola cifra, ponemos un cero por delante
if (entero<16){
cadena = cadena + "(0" + Integer.toString(entero,16);
}else{
cadena = cadena + "(" + Integer.toString(entero,16);
}
}
}else{
//Comprobamos si tenemos que cerrar el paréntesis
if (noImprimible){
cadena = cadena + ")" + Integer.toString(entero,16);
noImprimible = false;
}else{
cadena = cadena + Integer.toString(entero,16);
}
}
}
//Si hemos recorrido todo el mensaje y falta por cerrar algun paréntesis,
//lo cerramos al final
if (noImprimible){
cadena = cadena + ")";
}

} catch (UnsupportedEncodingException e) {
return "";
}

return cadena;
}//class