Convertir flujo de int a char en java

Probablemente se haya respondido esto en otro lugar, pero ¿cómo se obtiene el valor del carácter de un valor int?

Específicamente, estoy leyendo a desde un flujo de tcp y el método de lectores .read () devuelve un int.

¿Cómo obtengo un char de esto?

Si intenta convertir una secuencia en texto, debe saber qué encoding desea usar. A continuación, puede pasar una matriz de bytes en el constructor de String y proporcionar un conjunto de Charset , o bien utilizar InputStreamReader con el Charset correspondiente.

Simplemente enviar de int a char solo funciona si quieres ISO-8859-1, si estás leyendo bytes de una transmisión directamente.

EDITAR: Si ya está usando un Reader , entonces el retorno del valor de read() a char es el camino correcto (después de verificar si es -1 o no) … pero normalmente es más eficiente y conveniente llamar a read(char[], int, int) para leer todo un bloque de texto a la vez. No olvide verificar el valor de retorno, para ver cuántos caracteres se han leído.

Quizás estás pidiendo:

 Character.toChars(65) // returns ['A'] 

Más información: Character.toChars(int codePoint)

Convierte el carácter especificado (punto de código Unicode) en su representación UTF-16 almacenada en una matriz char. Si el punto de código especificado es un valor BMP (Basic Multilingual Plane o Plane 0), la matriz de caracteres resultante tiene el mismo valor que codePoint. Si el punto de código especificado es un punto de código suplementario, la matriz de caracteres resultante tiene el par sustituto correspondiente.

Depende de lo que quiere decir con “convertir un int a char”.

Si simplemente desea convertir el valor en el int, puede convertirlo usando la notación de tipochado de Java:

 int i = 97; // 97 is 'a' in ASCII char c = (char) i; // c is now 'a' 

Si quiere decir transformar el número entero 1 en el carácter ‘1’, puede hacerlo así:

 if (i >= 0 && i < = 9) { char c = Character.forDigit(i, 10); .... } 

Si quiere simplemente convertir int 5 a char ‘5’: (Solo para enteros 0 – 9)

 int i = 5; char c = (char) ('0' + i); // c is now '5'; 

Fundición simple:

 int a = 99; char c = (char) a; 

¿Hay alguna razón para que esto no funcione para ti?

Esta solución funciona para el tamaño de longitud entero = 1.

Integer input = 9; Character.valueOf((char) input.toString().charAt(0))

si size> 1 tenemos que usar for loop y iterar.

La mayoría de las respuestas aquí proponen atajos, que pueden traerle grandes problemas si no tiene idea de lo que está haciendo. Si desea tomar atajos, debe saber exactamente en qué encoding están sus datos.

UTF-16

Siempre que Java habla de caracteres en su documentación, habla de caracteres de 16 bits.

Puede usar un DataInputStream , que tiene métodos convenientes. Para mayor eficiencia, envuélvelo en un BufferedReader .

 // eg for sockets DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream())); char character = readChar(); // no need to cast 

El problema es que cada readChar() realizará 2 read y las combinará con un carácter de 16 bits.

US-ASCII

US-ASCII reserva 8 bits para codificar 1 carácter. La tabla ASCII solo describe 128 caracteres posibles, por lo que 1 bit no se usa.

Simplemente puede realizar un yeso en este caso.

 int input = stream.read(); if (input < 0) throw new EOFException(); char character = (char) input; 

ASCII extendido

UTF-8, Latin-1, ANSI y muchas otras codificaciones usan todos los 8 bits. Los primeros 7 bits siguen la tabla ASCII y son idénticos a los de la encoding US-ASCII. Sin embargo, el 8vo bit ofrece caracteres que son diferentes en todas estas codificaciones. Entonces, aquí las cosas se ponen interesantes.

Si eres un vaquero, y piensas que el 8vo bit no importa (es decir, no te importan los personajes como "à, é, ç, è, ô ...) entonces puedes salir con un simple elenco.

Sin embargo, si desea hacerlo profesionalmente, SIEMPRE debe especificar SIEMPRE un conjunto de caracteres cada vez que importe / exporte texto (por ejemplo, sockets, archivos ...).

Siempre use conjuntos de caracteres

Seamos serios. Todas las opciones anteriores son trucos baratos. Si desea escribir software flexible, necesita admitir un juego de caracteres configurable para importar / exportar sus datos. Aquí hay una solución genérica:

Lea sus datos utilizando un búfer byte[] y conviértalo en una String usando un parámetro de juego de caracteres .

 byte[] buffer = new byte[1024]; int nrOfBytes = stream.read(buffer); String result = new String(buffer, nrOfBytes, charset); 

También puede usar un InputStreamReader que se puede instanciar con un parámetro de juego de caracteres.

Solo una regla de oro más: nunca lanzar un byte directamente a un personaje. Eso siempre es un error.

Basando mi respuesta en la suposición de que el usuario solo quería convertir Literalmente un int a char , por ejemplo

 Input: int i = 5; Output: char c = '5' 

Esto ya se ha respondido anteriormente, sin embargo, si el valor entero es i > 10 , entonces necesita usar la char array .

 char[] c = String.valueOf(i).toCharArray(); 
  int i = 7; char number = Integer.toString(i).charAt(0); System.out.println(number); 

Esto es completamente dependiente de la encoding de los datos entrantes.

quizás no el más rápido:

 //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); 

La respuesta para la conversión de char a int o long es simple.

Por ejemplo: – si desea convertir Char ‘0’ en largo.

Sigue el reparto simple

 Char ch='0'; String convertedChar= Character.toString(ch); //Convert Char to String. Long finalLongValue=Long.parseLong(convertedChar); 

¡¡Hecho!!