【问题标题】:Byte array -> String -> Byte array字节数组 -> 字符串 -> 字节数组
【发布时间】:2013-10-23 15:42:28
【问题描述】:

我正在尝试将 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 的评论,您是否正在处理从 myFunction() 返回的 byte[] 中的实际 ASCII/可打印数据?你想通过转换做什么?
  • String to Byte Array的可能重复
  • 另一种解决方案:stackoverflow.com/a/14669835/1057429

标签: android arrays string byte


【解决方案1】:

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

将字符串转换为字节数组

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

【讨论】:

    【解决方案2】:

    您应该能够通过使用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();
    

    这应该可行。

    【讨论】:

      猜你喜欢
      • 2011-10-04
      • 2015-03-19
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-09
      • 2011-02-04
      相关资源
      最近更新 更多