Android 字节数组->;字符串->;字节数组
我正在尝试将字节[]转换为字符串,然后将字符串转换为字节[]。我检索到的不是相同的字节[]数组Android 字节数组->;字符串->;字节数组,android,arrays,string,byte,Android,Arrays,String,Byte,我正在尝试将字节[]转换为字符串,然后将字符串转换为字节[]。我检索到的不是相同的字节[]数组 byte[] bArray1 = myFunction(); System.out.println("array1 = " + bArray1.toString()); String str = new String(bArray1); byte[] bArray2 = str.getBytes(); System.out.println("array2 = " + bArray2.toString(
byte[] bArray1 = myFunction();
System.out.println("array1 = " + bArray1.toString());
String str = new String(bArray1);
byte[] bArray2 = str.getBytes();
System.out.println("array2 = " + bArray2.toString());
执行后,我得到:
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]
为什么会发生这种情况?如何获得相同的数组
这可以在我的电脑上工作,但不能在我的android上工作:
byte[] bArray1 = myFunction();
String str = Base64.encodeToString(bArray1, Base64.DEFAULT);
byte[] bArray2 = Base64.decode(str, Base64.DEFAULT);
我看过这篇文章。
但是安卓没有十六进制类
已编辑
对不起,我错了Base64不能工作
这是在android 2.3.3、2.3.4、4.2、4.3上测试的,它可以工作:
byte[] bArray1 = myFunction();
String str = Base64.encodeToString(bArray1, Base64.DEFAULT);
byte[] bArray2 = Base64.decode(str, Base64.DEFAULT);
您应该能够通过使用
ByteBuffer
和CharSet
来解决这个问题
Android在默认情况下使用UTF-8编码(您可以使用进行检查),因此您需要指定这是您希望对字符串进行编码和解码的方式
ByteBuffer buff = Charset.defaultCharset().encode(myString);
byte[] bytes = buff.array();
CharBuffer charBuff = Charset.defaultCharset().decode(bytes);
String original = charBuff.toString();
这应该是可行的。示例此函数可能会对您有所帮助 将字符串转换为字节数组
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;
}
将字节数组转换为字符串
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;
}
它们是同一字符串的不同字符编码基于tom的注释,您是否在处理myFunction()返回的字节[]中的实际ASCII/可打印数据?您试图通过转换做什么?可能与另一个解决方案重复: