我有一个字符串String a = "abc";
。现在我想将它转换为一个字节数组byte b[];
,这样当我打印b
时,它应显示“abc”。
我该怎么做?
getBytes()
方法给出了不同的结果。
到目前为止,我的程序看起来像这样:
String a="abc";
byte b[]=a.getBytes();
我想要的是我在第一课中制作了两种方法 public byte [] encrypt(String a) 另一个是 public String decrypt(byte [] b) 加密后我将数据保存到数据库中,但是当我收回数据时,字节方法没有给出正确的输出,但我使用String方法得到了相同的数据,但现在我必须将它传递给decrypt(byte [] b) 如何做到这是真实的情景。
答案 0 :(得分:9)
嗯,你的第一个问题是Java中的String不是字节数组,而是字符数组,其中每个字符串都需要16位。这是为了覆盖unicode字符,而不仅仅是你用字节获得的ascii。这意味着如果使用getBytes
方法,则无法一次打印一个数组位置的字符串,因为它需要两个数组位置(两个字节)来表示一个字符。
你可以做的是使用getChars
,然后将每个char转换为一个字节,并具有相应的精度los。这不是一个好主意,因为它不会在普通英文字符之外工作!但是你问,所以你去;)
答案 1 :(得分:1)
您可以使用this构造函数再次构建字符串:
String a="abc";
byte b[]=a.getBytes("UTF-8");
System.out.println(new String(b, "UTF-8"));
除此之外,您无法System.out.println(b)
并希望看到abc
。
答案 2 :(得分:1)
byte b[]=a.getBytes();
System.out.println(new String(b));
答案 3 :(得分:0)
一个字节是-128到127之间的值。打印时,默认情况下它是一个数字。
如果要将其打印为ASCII字符,可以将其强制转换为(char)
byte[] bytes = "abc".getBytes();
for(byte b: bytes)
System.out.println((char) b);
打印
a
b
c
答案 4 :(得分:0)
这会将“abc”转换为字节,然后代码将在相应的ASCII代码中打印“abc”(即97 98 99)。
byte a[]=new byte[160];
String s="abc";
a=s.getBytes();
for(int i=0;i<s.length();i++)
{
System.out.print(a[i]+" ");
}
如果添加这些行,它将再次将ASCII代码更改为String(即。abc)
String s1=new String(a);
System.out.print("\n"+s1);
希望它能帮助你。
修改后的代码:
将字节数组作为参数发送:
public static void another_method_name(byte b1[])
{
String s1=new String(b1);
System.out.print("\n"+s1);
}
public static void main(String[] args)
{
byte a[]=new byte[160];
String s="abc";
a=s.getBytes();
for(int i=0;i<s.length();i++)
{
System.out.print(a[i]+" ");
}
another_method_name(a);
}
希望它再次有用。
答案 5 :(得分:0)
您似乎正在实施加密和解密代码。 字符串构造函数用于文本数据。你不应该用它来转换字节数组 其中包含加密数据到字符串值。 您应该使用base64,它将任何二进制数据编码为ASCII。
这是一个很好的公共领域
http://iharder.sourceforge.net/current/java/base64/
base64 apache commons
http://commons.apache.org/codec/download_codec.cgi
String msg ="abc";
byte[] data = Base64.decode(msg);
String convert = Base64.encodeBytes(data);