字节数组 -> 字符串 -> 字节数组

4
我试图将byte[]转换为String,然后将String转换为byte[]。但我得到的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());

执行后我得到了以下结果:
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]

为什么会发生这种情况?我应该如何获得相同的数组?

在我的电脑上可以运行,但在我的安卓手机上不行:

byte[] bArray1 = myFunction();
String str = Base64.encodeToString(bArray1, Base64.DEFAULT);
byte[] bArray2 = Base64.decode(str, Base64.DEFAULT);

我看过这篇文章Hex-encoded String to Byte Array,但是Android没有Hex类。 编辑 对不起,我错了,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);

它们是同一字符串的不同字符编码。 - tom
在Tom的评论基础上,你是否正在处理从myFunction()返回的byte[]中实际的ASCII/可打印数据?并且你想通过转换做什么? - K5 User
2
可能是字符串转字节数组的重复问题。 - Nir Alfasi
另一个解决方案:https://dev59.com/92Uq5IYBdhLWcg3wPd-r#14669835 - Nir Alfasi
2个回答

0

这个函数的例子可能会对你有所帮助

将字符串转换为字节数组

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;
}

0
你可以使用 ByteBufferCharSet 来解决这个问题。
Android 默认使用 UTF-8 编码(你可以通过 Charset.defaultCharset() 来检查),因此你需要指定你想要编码和解码字符串的方式。
ByteBuffer buff = Charset.defaultCharset().encode(myString);
byte[] bytes = buff.array();
CharBuffer charBuff = Charset.defaultCharset().decode(bytes);
String original = charBuff.toString();

这应该可以工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接