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

时间:2013-10-15 18:00:27

标签: android arrays string byte

我正在尝试将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);

2 个答案:

答案 0 :(得分: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();

这应该有用。

答案 1 :(得分: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;
}