이것은 아마도 다른 곳에서 대답되었을 것입니다. 그러나 int 값의 문자 값을 어떻게 얻습니까?
특히 tcp 스트림에서 a를 읽고 있으며 독자 .read () 메서드는 int를 반환합니다.
이것에서 문자를 어떻게 얻습니까?
답변
스트림을 텍스트로 변환하려는 경우 사용할 인코딩을 알고 있어야합니다. 그런 다음 String
생성자 에 바이트 배열을 전달 하고Charset
하거나 대신 InputStreamReader
적절한 것과 함께 사용할 수 있습니다 Charset
.
단순히 캐스팅 int
char
스트림에서 직접 바이트를 읽는 경우 ISO-8859-1을 원하는 경우에만 로 것이 작동합니다.
편집 : 당신이하면 되는 이미를 사용하여 Reader
다음의 반환 값 캐스팅, read()
에 char
(그것의 -1 여부 확인 후) 갈 수있는 올바른 방법입니다 …하지만 일반적으로보다 효율적이고 편리 호출 read(char[], int, int)
의 전체 블록을 읽고 한 번에 텍스트. 얼마나 많은 문자를 읽었는지 확인하려면 반환 값을 확인하는 것을 잊지 마십시오.
답변
아마도 당신은 다음을 요구하고있을 것입니다 :
Character.toChars(65) // returns ['A']
더 많은 정보: Character.toChars(int codePoint)
지정된 문자 (유니 코드 코드 포인트)를 char 배열에 저장된 UTF-16 표현으로 변환합니다. 지정된 코드 포인트가 BMP (Basic Multilingual Plane 또는 Plane 0) 값인 경우 결과 char 배열은 codePoint와 동일한 값을 갖습니다. 지정된 코드 포인트가 보충 코드 포인트 인 경우 결과 char 배열에는 해당하는 서로 게이트 쌍이 있습니다.
답변
“int를 char로 변환”이 의미하는 바에 따라 다릅니다.
단순히 int의 값을 캐스팅하려는 경우 Java의 typecast 표기법을 사용하여 캐스팅 할 수 있습니다.
int i = 97; // 97 is 'a' in ASCII
char c = (char) i; // c is now 'a'
정수 1을 문자 ‘1’로 변환하려는 경우 다음과 같이 할 수 있습니다.
if (i >= 0 && i <= 9) {
char c = Character.forDigit(i, 10);
....
}
답변
int 5를 char ‘5’로 간단히 변환하려면 : (정수 0-9에만 해당)
int i = 5;
char c = (char) ('0' + i); // c is now '5';
답변
단순 캐스팅 :
int a = 99;
char c = (char) a;
이것이 작동하지 않는 이유가 있습니까?
답변
이 솔루션은 정수 길이 크기 = 1에 대해 작동합니다.
Integer input = 9;
Character.valueOf((char) input.toString().charAt(0))
크기가 1보다 크면 for 루프를 사용하고 반복해야합니다.
답변
여기에서 대부분의 답변은 지름길을 제안하는데, 당신이 무엇을하고 있는지 모른다면 큰 문제를 일으킬 수 있습니다. 바로 가기를 사용하려면 데이터 인코딩이 정확히 무엇인지 알아야합니다.
UTF-16
자바는 문서에서 문자에 대해 이야기 할 때마다 16 비트 문자에 대해 이야기합니다.
DataInputStream
편리한 방법이있는를 사용할 수 있습니다 . 효율성을 위해 BufferedReader
.
// e.g. for sockets
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
char character = readChar(); // no need to cast
문제는 각각 readChar()
이 실제로 2를 수행 read
하고 하나의 16 비트 문자로 결합한다는 것입니다.
US-ASCII
US-ASCII는 8 비트를 예약하여 1 개의 문자를 인코딩합니다. 하지만 ASCII 테이블은 128 개의 가능한 문자 만 설명하므로 1 비트는 항상 사용되지 않습니다.
이 경우 간단히 캐스트를 수행 할 수 있습니다.
int input = stream.read();
if (input < 0) throw new EOFException();
char character = (char) input;
확장 ASCII
UTF-8, Latin-1, ANSI 및 기타 여러 인코딩은 모두 8 비트를 사용합니다. 첫 번째 7 비트는 ASCII 테이블을 따르며 US-ASCII 인코딩의 것과 동일합니다. 그러나 8 번째 비트는 이러한 모든 인코딩에서 다른 문자를 제공합니다. 그래서 여기서 흥미로운 일이 생깁니다.
만약 당신이 카우보이이고 8 번째 비트가 중요하지 않다고 생각한다면 (즉, “à, é, ç, è, ô …와 같은 캐릭터에 신경 쓰지 않는다”) 간단한 캐스트로 도망 칠 수 있습니다.
그러나이 작업을 전문적으로 수행하려면 텍스트 (예 : 소켓, 파일 …)를 가져 오거나 내보낼 때마다 항상 문자 집합을 지정해야합니다.
항상 문자 세트 사용
진지 해지자. 위의 모든 옵션은 저렴한 트릭입니다. 유연한 소프트웨어를 작성하려면 데이터 가져 오기 / 내보내기를 위해 구성 가능한 문자 집합을 지원해야합니다. 다음은 일반적인 솔루션입니다.
byte[]
버퍼를 사용하여 데이터를 읽고 String
charset 매개 변수를 사용하여 이를로 변환합니다 .
byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);
당신은 또한 사용할 수 있습니다 InputStreamReader
charset 매개 변수로 인스턴스화 할 수있는를 .
황금률이 하나 더 있습니다. 문자에 바이트를 직접 캐스팅하지 마십시오. 그것은 항상 실수입니다.