3

次のように初期化されたバイト配列があります。

public static byte[] tmpIV =  {0x43, (byte)0x6d, 0x22, (byte)0x9a, 0x22,
                         (byte)0xf8, (byte)0xcf, (byte)0xfe, 0x15, 0x21,
                         (byte)0x0b, 0x38, 0x01, (byte)0xa7, (byte)0xfc, 0x0e};

私がそれを印刷すると、それは私に与えます

67   109    34      -102       34     -8          -49      -2      21      33
11    56    1       -89       -4      14

次に、バイト配列全体を文字列に変換して、友人に送信しました。

String str = new String(tmpIV);

私の友人は C# プログラマーです

それで、私の友人は他のデータを取得します。私が送信したデータと同じデータを友人が取得する方法。また、Java で上記の文字列をバイト配列に再変換すると、送信した正確な文字列が得られません。

 67     109        34        -17        -65      -67      34       -17     -65       -67
-17     -65        -67        -17         -65    -67      21       33    11     56      1
-17      -65      -67         -17       -65       -67   
4

3 に答える 3

0

あなたとあなたの友人の両方が同じエンコーディング プロトコルを使用していることを確認する必要があります。したがって、Javaに関しては、代わりにString aString = new String(byteArray)使用することをお勧めしますString aString = new String(byteArray, Charset.forName("UTF-8"))(たとえば、両方が「UTF-8」を好む場合)

PS: ところで、友人からのバイト配列に "-17 -65 -67" のパターンが数回あることに気付いたのではないでしょうか。私の経験では、これらの 3 つの数字パターンは「?」を意味します。UTF-8 の文字

于 2013-01-05T22:54:02.170 に答える
-4

前の回答に同意します-base64アプローチを使用する必要がありますが、base64を使用するのは簡単です;)。sun.miscパッケージの base64 util クラスを使用するだけです。

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.IOException;
import java.util.Arrays;
public class Base64Test {

    public static byte[] tmpIV = {0x43, (byte) 0x6d, 0x22, (byte) 0x9a, 0x22,
            (byte) 0xf8, (byte) 0xcf, (byte) 0xfe, 0x15, 0x21,
            (byte) 0x0b, 0x38, 0x01, (byte) 0xa7, (byte) 0xfc, 0x0e};


    public static void main(String[] args) {
        try {
            String encoded = new BASE64Encoder().encode(tmpIV);
            System.out.println(encoded);
            byte[] decoded = new BASE64Decoder().decodeBuffer(encoded);
            System.out.println(Arrays.equals(tmpIV,decoded));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
于 2009-05-21T09:44:40.180 に答える