Convertir hexadecimal a caracter imprimible
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
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
SÃ, yo lo tengo también asÃ; la solución es poner:
(char)nombrehex; asà te escribe el carácter.
(char)nombrehex; asà te escribe el carácter.
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
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
