我遇到了将字节字符串转换为字节数组的转换问题。
即我有一个字符串“ [B @ 1a758cb ”。那是主要字符串“gunjan”的Base64加密字符串。这里解密我想将加密的字节串转换为byte []。
但是String.getByte []对我不起作用。 String.getBytes []给出字节String的字节。
我该怎么做?我是否必须迭代字节字符串中的每个字符并将它们转换为byte [] ??
已编辑
我使用Apache Coded 3.1 jar进行Base64转换。 这是我从中获取此加密文本的代码..
String in = "gunjan";
byte[] byteStr = in.getBytes();
byte[] base64Encoded = Base64.encodeBase64(byteStr);
此处base64Encoded的值为 [B @ 1a758cb 您还可以在图片中看到控制台日志..
答案 0 :(得分:6)
首先,这里没有任何问题,因为解码后的字符串值(gunjan)等于原始值(gunjan)。
您对中间字节数组的打印内容感到困惑。如注释中所述,字符串[@Bxxxx
是在字节数组上调用toString()的结果。这不显示字节的值,而是显示数组的类型([@B
),后跟数组对象的hashCode。如果要显示字节值,请使用
System.out.println(Arrays.toString(byteArray));
你有一个潜在的错误:你使用默认编码将字符串转换为字节,反之亦然。此编码可能无法支持String中的每个字符。您应该使用支持地球上每个角色的特定编码,例如UTF8:
byte[] byteStr = string.getBytes("UTF8");
...
String str = new String (byteStr, "UTF8");