将字符串转换为byte [],使内容保持不变

时间:2012-07-06 07:07:17

标签: java

我有一个字符串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) 如何做到这是真实的情景。

6 个答案:

答案 0 :(得分:9)

嗯,你的第一个问题是Java中的String不是字节数组,而是字符数组,其中每个字符串都需要16位。这是为了覆盖unicode字符,而不仅仅是你用字节获得的ascii。这意味着如果使用getBytes方法,则无法一次打印一个数组位置的字符串,因为它需要两个数组位置(两个字节)来表示一个字符。

可以做的是使用getChars,然后将每个char转换为一个字节,并具有相应的精度los。这不是一个好主意,因为它不会在普通英文字符之外工作!但是你问,所以你去;)

编辑:正如@PeterLawerey所提到的,Unicode字符使得它变得更难,一些unicode字符需要多个char。有一个很好的讨论in StackOverflow,它链接到详细的article from Oracle

答案 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)

  1. 这会将“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]+" ");
    }
    
  2. 如果添加这些行,它将再次将ASCII代码更改为String(即。abc)

    String s1=new String(a);
    System.out.print("\n"+s1);
    
  3. 希望它能帮助你。

    修改后的代码:

    将字节数组作为参数发送:

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