2017-03-29 4 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의 값이되는 정수로 승격시킬 때 b (a byte)로 확장됩니다. 0xFFFFFFC8은 부호가있는 -56의 2의 보수 표현입니다. this을 참조하십시오. 이 작업을 수행하여 부호 확장을 방지 할 수 있습니다 :

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

이 값 0xC8 (십진수 200) 인쇄하려면 원인이됩니다.

관련 문제