2017-03-29 10 views
0

EBCDICエンコーディングを使用してバイト配列を変換した文字列を作成しました。私が配列を出力すると、Hの値はEBCDICのチャートにあるものと同じではありません。 "H" のEBCDIC値を含む印刷バイト配列は期待値を与えません

期待出力

EBCDIC値 - "H" のEBCDIC 1047 chart

実際の出力

EBCDIC値リンクの通り> 200 - > - 56 ]

public static void main(String[] args) throws UnsupportedEncodingException { 
    String str = "H"; 
    byte[] b1 = new byte[10]; 
    b1 = str.getBytes("Cp1047"); 
    System.out.println(Arrays.toString(b1)); 

    for (byte b : b1) { 
     System.out.println(b); 
    } 

    b1 = str.getBytes("UTF-16"); 
    System.out.println(Arrays.toString(b1)); 

    b1 = str.getBytes(); 
    System.out.println(Arrays.toString(b1)); 
} 

答えて

4

ループ内

for (byte b : b1) 
    System.out.println(b); 

Javaは、それを整数に昇格したときに符号拡張する(符号なし)ため、0xFFFFFFC8の値が出力されます。 0xFFFFFFC8は符号付き番号-56の2の補数表現です。 thisを参照してください。あなたはこれを行うことにより、符号拡張を防ぐことができます。

for (byte b :b1) 
    System.out.println(b & 0xFF); 

これは値0xC8(10進数で200)が印刷されるようにします。

関連する問題