2013-04-20 135 views
0

我遇到了将字节字符串转换为字节数组的转换问题。如何将字节字符串转换为字节[]

即我有一个字符串“[B @ 1a758cb”。这是主要字符串“gunjan”的Base64加密字符串。这里为了解密,我想将加密的字节串转换为byte []。

但String.getByte []不适用于我。 String.getBytes []给出字节字符串的字节。

我该怎么做?我是否必须迭代字节字符串中的每个字符并将它们转换为byte []?

我使用Apache 3.1编码罐子里的Base64转换编辑。 这是从我得到这个密文代码..

String in = "gunjan"; 
byte[] byteStr = in.getBytes(); 
byte[] base64Encoded = Base64.encodeBase64(byteStr); 

这里base64Encoded的值是[B @ 1a758cb您还可以看到控制台日志图像中.. enter image description here

+1

请看问题http://stackoverflow.com/questions/1536054/how-to-convert-byte-array-to-string - 反之亦然?rq = 1涵盖了这一点。 – Bobulous 2013-04-20 10:50:07

+2

Base64不包含'['或'@' – McDowell 2013-04-20 10:50:46

+5

您的字符串不是base64字符串,它是对字节数组调用'toString()'的结果。它绝不代表该数组的原始值。 – 2013-04-20 10:56:15

回答

4

首先,这里没有任何问题,因为解码后的字符串值(gunjan)等于原始值(gunjan)。

您对打印的中间字节数组内容感到困惑。如注释中所述,字符串[@Bxxxx是在字节数组上调用toString()的结果。这不会显示字节的值,而是数组的类型([@B),随后是数组对象的hashCode。如果你想显示的字节值,使用

System.out.println(Arrays.toString(byteArray)); 

你有一个潜在的错误,但:您正在使用的默认编码转换字符串字节,反之亦然。此编码可能无法支持字符串中的每个字符。您应该使用支持地球上的每一个字符,像UTF8特定的编码:

byte[] byteStr = string.getBytes("UTF8"); 
... 
String str = new String (byteStr, "UTF8"); 
+0

感谢您的答复。在这里我仅举例说明,我如何加密文本。我的主要问题是我有加密的文本“[B @ 1a758cb”存储在字符串变量中。我如何将它转换为字节[]。 String.getByte []在这里不起作用。 – 2013-04-20 12:18:39

+0

也看到这篇文章:http://stackoverflow.com/questions/5499924/convert-java-string-to-byte-array/5500020#5500020这是非常类似于我的问题.. – 2013-04-20 12:19:28

+0

你不加密任何东西。您将一个字符串编码为64,然后对编码后的字符串进行解码,因为您得到的是原始字符串。所以有什么问题?你有没有阅读并理解我的答案? String.getBytes()将字符串转换为字节数组。什么不起作用?向我们展示一段清晰的代码,告诉我们你期望它做什么,以及它做什么。 – 2013-04-20 12:24:13