2013-06-04 3 views
0

4 바이트 값을 포함 할 수있는 가변 문자를 만들려면 어떻게해야합니까?Java에서 16 비트 char을 생성하는 데 문제가 있습니다.

재미있는 내용으로 자바에서 메시지를 암호화하는 프로그램을 작성하려고합니다. RSA 사용법을 알아 냈고 메시지를 암호화하고 .txt 파일로 저장하는 프로그램을 작성했습니다. 예를 들어 "Quiet"를 입력하면 결과는 "041891090280"이됩니다. 번호가 항상 6의 배수가되도록 코드를 작성했습니다. 그래서 숫자를 해시 코드로 변환 할 수 있다고 생각했습니다. 처음 세 글자는 "041"이므로이를 ")"로 변환 할 수 있습니다.

그러나 255보다 큰 숫자로 문자를 생성하는 데 문제가 있습니다. 온라인에서 살펴본 결과 몇 가지 예가 있지만이를 구현하는 방법을 알 수는 없습니다. 나는 그 (것)들을 시험하기 위하여 다만 새로운 방법을 창조했다.

int a = 256; 
char b = (char) a; 
char c = 0xD836; 
char[] cc = Character.toChars(0x1D50A); 
System.out.println(b); 
System.out.println(c); 
System.out.println(cc); 

프로그램 출력

?

?

?

저는 2 바이트 밖에받지 못합니다. 나는 자바가 유니 코드를 사용하는데, 이는 4 바이트 인 65535까지 올라야한다는 것을 읽었다. 차이가 나는 경우 이클립스 사용하고 있습니다.

멍청한 질문에 사과드립니다. 그리고 미리 감사드립니다.

편집 죄송합니다. 정보를 너무 많이 주었고 혼란에 빠졌습니다. 내가 원하는 것은 숫자 문자열을 유니 코드 문자의 문자열로 저장하는 것입니다. 그걸하는 법을 아는 유일한 방법은 캐릭터에 맞추기에 충분히 작은 숫자의 줄을 끊는 것입니다. 그런 다음 문자를 하나씩 새 문자열에 추가하십시오. 하지만 변수 유니 코드 문자를 문자열에 추가하는 방법을 모르겠습니다.

+0

Java의 문자는 기본 다국어 평면의 문자 만 인코딩하지 않습니다. –

+0

참조 http://stackoverflow.com/questions/13112435/how-does-java-store-utf-16-characters-in-its-16-bit-char-type –

+0

죄송합니다. 타일에서 32 비트라고 말한 것을 깨달았습니다. 나는 16 비트를 말해야했다. – user2452405

답변

0

모든 문자는 이미 16 비트입니다. 0 65535 16 비트 및 2^16 = 65536

주의가 필요합니다 : 모든 문자가 유효하고, 특히 있습니다하지, 0xDFFF에 0xD800는 코드 포인트를 (65536 이상 자)

당신이 만약을 인코딩하는 데 사용된다 가능한 짧은 16 비트 값을 모두 저장할 수 있기를 바랍니다. 동일한 값을 저장할 수는 있지만 사용하기가 덜 혼란 스러울 수 있습니다.

+0

나는 short (a)로 256을 저장하려고 시도했다. 그 다음 char c = (char) a; 하지만 "?" 255보다 큰 값으로 생성 된 모든 문자와 마찬가지입니다.이 작업의 예제를 놈에게 보여줄만큼 친절 할 수 있습니까? 세 가지 방법을 사용하여 숯을 만들려고했지만 그 중 어떤 것도 작동하지 않습니다. – user2452405

+0

문자를 표시하면 디스플레이 인코딩과 글꼴이 재생됩니다. 문자를 표시 할 수 있는지 여부는 문자가 올바르게 저장되었다는 표시가 아닙니다. 다른 글꼴을 사용해야 할 수도 있습니다. 시스템에 가능한 모든 문자 값을 표시하는 글꼴이 없을 수 있으며 대부분의 문자는 정의에 따라 실제 문자가 아닙니다. 문자를 4 바이트 16 진수로 표시하는 것이 좋습니다. 이것은 모든 문자에 적용됩니다. –

+0

참고 : 일부 문자는 올바르게 표시 될 때 보이지 않으며 문자 \ u202e는 그 뒤에 오는 모든 문자를 역순으로 표시합니다. 나는 이것이 가능한 모든 char 가치에 대해 단순한 보편적 인 표현이 있다고 가정하고 있다는 것을 믿습니다. –