1

私はストリングと言いString a = "abc";ます。今、私はそれをバイト配列に変換したいbyte b[];ので、印刷bすると「abc」と表示されるはずです。

どうやってやるの? getBytes()メソッドは異なる結果をもたらします。

私のプログラムはこれまでのところ次のようになっています。

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

私が欲しいのは、クラスで作成された2つのメソッドがあることです。1つは public byte[] encrypt(String a) で、もう1つは public String decrypt(byte[] b) です当時、byteメソッドは正しい出力を提供していませんでしたが、Stringメソッドを使用して同じデータを取得しましたが、今はそれをdecrypt(byte [] b)に渡す必要があります。これを行う方法は実際のシナリオです。

4

6 に答える 6

9

最初の問題は、Java の文字列はバイト配列ではなく、文字配列であり、それぞれが 16 ビットであるということです。これは、バイトで取得する ascii だけでなく、Unicode 文字をカバーするためのものです。つまり、このgetBytesメソッドを使用すると、1 文字を表すのに 2 つの配列位置 (2 バイト) が必要になるため、文字列を一度に 1 つの配列位置に出力することはできません。

あなたができることは、使用getCharsしてから、対応する精度で各文字をバイトにキャストすることです。通常の英字以外では機能しないため、これはお勧めできません。しかし、あなたは尋ねたので、ここに行きます ;)

編集: @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
  1. これにより、「abc」がバイトに変換され、コードは「abc」をそれぞれの ASCII コード (つまり、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 コードが文字列 (つまり 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

暗号化と復号化のコードを実装しているようです。文字列コンストラクターはテキスト データ用です。暗号化されたデータを含むバイト配列を文字列値に変換するために使用しないでください。代わりに、バイナリ データを ASCII にエンコードする base64 を使用する必要があります。

これは良いパブリックドメインのものです

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

base64 Apache コモンズ

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 に答える
0

バイトは -128 から 127 までの値です。印刷すると、デフォルトで数値になります。

ASCII char として出力したい場合は、(char)

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

版画

a
b
c
于 2012-07-06T07:11:50.163 に答える