Tengo que convertir una matriz de bytes a cadena en Android, pero mi matriz de bytes contiene valores negativos.
Si vuelvo a convertir esa cadena en matriz de bytes, los valores que obtengo son diferentes a los de la matriz de bytes original.
¿Qué puedo hacer para conseguir una conversión adecuada? El código que estoy usando para hacer la conversión es el siguiente:
// Code to convert byte arr to str:
byte[] by_original = {0,1,-2,3,-4,-5,6};
String str1 = new String(by_original);
System.out.println("str1 >> "+str1);
// Code to convert str to byte arr:
byte[] by_new = str1.getBytes();
for(int i=0;i<by_new.length;i++)
System.out.println("by1["+i+"] >> "+str1);
Estoy atascado en este problema.
Su matriz de bytes debe tener alguna codificación. La codificación no puede ser ASCII si tiene valores negativos. Una vez que lo hayas averiguado, puedes convertir un conjunto de bytes en una cadena utilizando:
byte[] bytes = {...}
String str = new String(bytes, "UTF-8"); // for UTF-8 encoding
Hay un montón de codificaciones que puedes usar, mira la clase Charset en los Sun javadocs.
Intente especificar un conjunto de caracteres de 8 bits en ambas conversiones. Por ejemplo, ISO-8859-1.