1

我有一个字符串说String a = "abc";。现在我想把它转换成一个字节数组说byte b[];,这样当我打印b它应该显示“abc”。

我怎样才能做到这一点? getBytes()方法给出不同的结果。

到目前为止,我的程序看起来像这样:

String a="abc";
byte b[]=a.getBytes();

我想要的是我在一个类中有两种方法,一种是公共字节 [] 加密(字符串 a),另一种是公共字符串解密(字节 [] b) 加密后我将数据保存到数据库中,但是当我得到它时当时字节方法没有给出正确的输出,但我使用字符串方法得到了相同的数据,但现在我必须将它传递给解密(字节 [] b)如何做到这一点这是真实的场景。

4

6 回答 6

9

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

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

编辑:正如@PeterLawerey 提到的,Unicode 字符使它变得更加困难,一些 Unicode 字符需要多个字符。StackOverflow 中有一个很好的讨论,它链接到Oracle 的详细文章

于 2012-07-06T07:11:41.453 回答
1
byte b[]=a.getBytes();
System.out.println(new String(b));
于 2012-07-06T07:12:40.260 回答
1

您可以使用构造函数重新构建您的字符串:

 String a="abc"; 
 byte b[]=a.getBytes("UTF-8");
 System.out.println(new String(b, "UTF-8"));

除此之外,你不能做也不能System.out.println(b)期望看到abc

于 2012-07-06T07:09:54.067 回答
0

一个字节是介于 -128 和 127 之间的值。当你打印它时,它默认是一个数字。

如果要将其打印为 ASCII 字符,可以将其转换为(char)

byte[] bytes = "abc".getBytes();
for(byte b: bytes)
    System.out.println((char) b);

印刷

a
b
c
于 2012-07-06T07:11:50.163 回答
0
  1. 这会将“abc”转换为字节,然后代码将以相应的 ASCII 码(即 97 98 99)打印“abc”。

    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 代码更改为字符串(即 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);
    } 

希望它再次有所帮助。

于 2012-07-06T07:34:14.070 回答
0

似乎您正在实施加密和解密代码。字符串构造函数用于文本数据。您不应该使用它将包含加密数据的字节数组转换为字符串值。您应该改用 base64,它将任何二进制数据编码为 ASCII。

这是一个很好的公共领域之一

http://iharder.sourceforge.net/current/java/base64/

base64 阿帕奇公地

http://commons.apache.org/codec/download_codec.cgi

String msg ="abc";
byte[] data = Base64.decode(msg);
String convert = Base64.encodeBytes(data);
于 2012-07-06T08:11:56.167 回答