int의 스트림을 Java의 char로 변환하는 중
이것은 아마 다른 곳에서 해결되었을 것입니다만, int 값의 문자 값은 어떻게 얻을 수 있을까요?
특히 tcp 스트림에서를 읽고 있는데 read() 메서드는 int를 반환합니다.
이거 어떻게 새까맣게 타요?
아마 다음과 같은 질문을 하고 있을 것입니다.
Character.toChars(65) // returns ['A']
상세 정보:
지정된 문자(Unicode 코드 포인트)를 문자 배열에 저장된 UTF-16 표현으로 변환합니다.지정된 코드 포인트가 BMP(Basic Multilinguage Plane or Plane 0) 값인 경우 결과 char 배열은 codePoint와 동일한 값을 가집니다.지정된 코드 포인트가 보조 코드 포인트인 경우 결과 char 배열은 대응하는 서로게이트 쌍을 가집니다.
"int를 char로 변환"하는 것이 무슨 뜻인지에 따라 다릅니다.
단순히 int에 값을 캐스트하는 경우 Java의 형식 캐스트 표기법을 사용하여 캐스트할 수 있습니다.
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);
....
}
스트림을 텍스트로 변환하려면 어떤 인코딩을 사용할지 알아야 합니다.그런 다음 바이트 배열을 컨스트럭터에 전달하여를 제공하거나 적절한와 함께 사용할 수 있습니다.Charset
대신.
단순한 캐스팅:int
로.char
ISO-8859-1이 필요한 경우에만 스트림에서 직접 바이트를 읽을 수 있습니다.
편집: 이미 사용하고 있는 경우Reader
, 그 후, 의 반환치를 캐스팅 합니다.read()
로.char
(-1인지 아닌지를 확인한 후) 올바른 방법...하지만 보통 전화하는 것이 더 효율적이고 편리합니다.read(char[], int, int)
한 번에 한 블록의 텍스트를 모두 읽을 수 있습니다.단, 몇 글자를 읽었는지 반환값을 확인하는 것을 잊지 마십시오.
단순히 int 5를 문자 '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))
size가 1을 넘으면 루프에 사용하고 반복해야 합니다.
대부분의 답변은 바로 가기를 제안합니다. 이 단축키는 자신이 무엇을 하고 있는지 모르는 경우 큰 문제를 일으킬 수 있습니다.바로 가기를 사용하려면 데이터가 정확히 어떤 인코딩인지 알아야 합니다.
UTF-16
Java는 문서에서 문자에 대해 말할 때마다 16비트 문자에 대해 이야기합니다.
'어울리다'를 사용할 수 요.DataInputStream
편리한 방법이 있습니다.위해 율화, 품 .BufferedReader
.
// e.g. for sockets
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
char character = readChar(); // no need to cast
한 것은 readChar()
2분 2초 2초 2시 2분.read
를 사용하여 이들을 하나의 16비트 문자로 조합합니다.
US-ASCII
US-ASCII 는, 1 문자를 부호화하기 위해서 8 비트를 예약합니다.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번째 비트가 중요하지 않다고 생각한다면(즉, 당신은 "a, e, ô, ..., ......"와 같은 캐릭터는 신경쓰지 않는다) 간단한 캐스팅으로 빠져나갈 수 있다.
그러나 전문적으로 이 작업을 수행하려면 텍스트(예: 소켓, 파일...)를 가져오거나 내보낼 때마다 문자 집합을 지정해야 합니다.
항상 문자 집합 사용
진지하게 얘기합시다.위의 모든 옵션은 싸구려 속임수입니다.유연한 소프트웨어를 작성하려면 데이터를 Import/export할 수 있는 구성 가능한 문자 집합을 지원해야 합니다.일반적인 솔루션은 다음과 같습니다.
「 」를 사용해 .byte[]
및 을 「버퍼링」으로합니다.String
charset 파라미터를 사용합니다.
byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);
「」, VIP 「」도 할 수 .InputStreamReader
charset은 charset 파라미터로 인스턴스화할 수.
또 하나의 황금률: 절대 문자에게 직접 한 바이트를 던지지 마세요.그건 항상 실수예요.
제 이라는 가정하에 입니다.int
로로 합니다.char
: " " )
Input:
int i = 5;
Output:
char c = '5'
상기에 만, 「」의 는, 「」i > 10
이렇게 하면 char array
.
char[] c = String.valueOf(i).toCharArray();
int i = 7;
char number = Integer.toString(i).charAt(0);
System.out.println(number);
이것은, 착신 데이터의 부호화에 전적으로 의존합니다.
가장 빠른 것은 아닐지도 모릅니다.
//for example there is an integer with the value of 5:
int i = 5;
//getting the char '5' out of it:
char c = String.format("%s",i).charAt(0);
char를 int 또는 long으로 변환하는 답은 단순 캐스팅입니다.
예를 들어:- 문자 '0'을 긴 문자로 변환하려면 다음과 같이 하십시오.
심플한 캐스트에 따르다
Char ch='0';
String convertedChar= Character.toString(ch); //Convert Char to String.
Long finalLongValue=Long.parseLong(convertedChar);
끝!!
언급URL : https://stackoverflow.com/questions/833709/converting-stream-of-ints-to-chars-in-java
'programing' 카테고리의 다른 글
MariaDB 프로시저의 사용자 지정 유형 생성 (0) | 2022.10.31 |
---|---|
Java HotSpot(TM) 64비트 서버 VM 경고: MaxPermSize 옵션 무시 (0) | 2022.10.31 |
json_array에 추가 (0) | 2022.10.31 |
Java 8의 java.time API에서의 모킹 타임 (0) | 2022.10.31 |
JavaScript 배열에서 임의 값 가져오기 (0) | 2022.10.31 |