2013-05-30 4 views
0

같이 I 바이트 (B)의 배열을 가지고해석 자바 바이트 [] 문자열

b = [-98, -99] 

는 I 함수로 데이터의 세그먼트를 전달해야한다. 이 함수는 String을 취합니다 (변경할 수는 없습니다).

Converting byte array to String (Java)

: 나는 B의 비트 중 하나를 변경하지 않고 자바 문자열로 B의 원시 이진 데이터를 해석하는 얻는 방법

편집

이의 반복되지 않습니다

때문에, 어레이 (B)는 비트 [1,001 1,110 1,001 1,101] 또는 [9E9D]로 구성된다. 제가

String str = new String(b, "Cp1252") 

을 사용하는 경우 Cp1252를 부호화 비트 1,001 또는 1,101 9D의 seqeuence 값이 없다. 그래서이 함수는 str = "¼?"결과를 낳습니다. 이진 형식은 [1001 1110 0011 1111] 또는 [9E3F]입니다. 함수가 내 비트를 변경 했으므로 본질적으로 데이터가 손상됩니다.

나는 이것이 재 해석 캐스트를 사용하여 C++에서 수행 될 수 있지만 같은 것은 자바에 존재하지 않는 생각합니다. 미리 감사드립니다.

+1

바이트의 인코딩은 무엇을? 개별 바이트의 의미를 알기 전까지는 바이트 스트림을 String으로 해석 할 수 없습니다. – Shrike

+0

'새로운 String (B, Charset.forName ("CP1252"))'? – assylias

+0

[-98, -99, -100, -102, -104]에 어떤 문자가 들어가기를 기대합니까? – Patashu

답변

0

임의의 값의 임의의 바이트로이를 수행 할 수 없습니다. 인코딩을 허용하지 않으므로 데이터 디코딩을 제어 할 수 없다고 가정합니다. 당신이가 디코딩을 제어 할뿐만 아니라 인코딩을해야합니까 경우에 데이터를 매핑 할 수 있도록, 당신이 당신의 자신의 캐릭터 세트를 작성할 수 다시 UTF-16로 인코딩 된 일반 자바 문자열 중. 그것을 인코딩하려면

String str = new String(byteBuffer, MyCharSet); 

그것을 해독하려면

byte[] byteBuffer = str.getBytes(MyCharSet); 
1

당신은 아마 charset가 사용할 인코딩으로 대체됩니다 new String(b, "charset")); 같은 것을 원한다. 값이 유효한 UTF-8이 아니라는 점을 제외하고는 UTF-8을 제안합니다.