Byte array -> String -> Conjunto de bytes
Estoy tratando de convertir byte [] a String y String a byte []. No recupero la misma matriz de bytes [].
byte[] bArray1 = myFunction(); System.out.println("array1 = " + bArray1.toString()); String str = new String(bArray1); byte[] bArray2 = str.getBytes(); System.out.println("array2 = " + bArray2.toString());
Después de ejecutar obtengo:
- ¿Qué hay de malo en la cadena hardcoded en el archivo xml android?
- Android StringBuilder vs Concatenación de cadenas
- Fórmula química en Android
- Alternativa de DatatypeConverter.printHexBinary (byte array) y DatatypeConverter.parseHexBinary (String str) en Android
- String-arrays de referencia en android strings.xml
array1 = [-15, -87, -44, 61, -115, 23, -3, 75, 99, 36, -49, 21, -41, -63, 100, -49] array2 = [-17, -65, -67, -17, -65, -67, 61, -17, -65, -67, 23, -17, -65, -67, 75, 99, 36, -17, -65, -67, 21, -17, -65, -67, -17, -65, -67, 100, -17, -65, -67, -17, -65, -67]
¿Por qué sucede y cómo puedo obtener la misma matriz?
Este trabajo en mi computadora, pero no en mi Android:
byte[] bArray1 = myFunction(); String str = Base64.encodeToString(bArray1, Base64.DEFAULT); byte[] bArray2 = Base64.decode(str, Base64.DEFAULT);
He visto el artículo Hex-encoded String to Byte Array . Pero Android no tiene clase Hex.
Editado
Lo siento, estaba equivocado que Base64 no está funcionando.
Esto fue probado en android 2.3.3, 2.3.4, 4.2, 4.3 y funciona:
byte[] bArray1 = myFunction(); String str = Base64.encodeToString(bArray1, Base64.DEFAULT); byte[] bArray2 = Base64.decode(str, Base64.DEFAULT);
- Cómo leer / escribir cadena de un archivo en Android
- Android: ¿Cómo url de la tienda en el archivo de recursos string.xml?
- ¿Por qué la marquesina no funciona en Widget?
- StringBuilder perdió datos al convertir a String
- Android (cambio de cadena en código java)
- Android: evita romper la línea en las partes TextView String
- Cómo agregar recursos de cadena en Eclipse?
- android: límite de 10 caracteres por línea TextView
Debe ser capaz de resolver esto utilizando un ByteBuffer
y un CharSet
.
Android utiliza la codificación UTF-8 de forma predeterminada (puede comprobar esto con Charset.defaultCharset()
), por lo que necesita especificar que es así como desea codificar y decodificar sus cadenas.
ByteBuffer buff = Charset.defaultCharset().encode(myString); byte[] bytes = buff.array(); CharBuffer charBuff = Charset.defaultCharset().decode(bytes); String original = charBuff.toString();
Esto debería funcionar.
Ejemplo de esta función podría ayudarle
Convertir cadena a matriz de bytes
public static byte[] convertStirngToByteArray(String s) { byte[] byteArray = null; if(s!=null) { if(s.length()>0) { try { byteArray = s.getBytes(); } catch (Exception e) { e.printStackTrace(); } } } return byteArray; }
Conversión de matriz de bytes en cadena
public static String convertByteArrayToString(byte[] byteArray) { String s = null; if(byteArray!=null) { if(byteArray.length>0) { try { s = new String(byteArray,"UTF-8"); } catch (Exception e) { e.printStackTrace(); } } } return s; }
- fragmento parcial android -> deslizar para ver fragmento completo
- Evitar el empaquetado de palabras en ciertas palabras (nombre de dominio) en android