Esto probablemente se haya respondido en otro lugar, pero ¿cómo se obtiene el valor de carácter de un valor int?
Específicamente, estoy leyendo una de una secuencia tcp y el método .read () de los lectores devuelve un int.
¿Cómo obtengo un char de esto?
public int read(char[] cbuf)
resolverá el problema?Respuestas:
Si está intentando convertir una secuencia en texto, debe saber qué codificación desea utilizar. A continuación, puede pasar una matriz de bytes al
String
constructor y proporcionar unCharset
, o utilizarInputStreamReader
el apropiado en suCharset
lugar.Simplemente, la conversión de
int
achar
solo funciona si desea ISO-8859-1, si está leyendo bytes de una transmisión directamente.EDITAR: Si ya está usando a
Reader
, entonces lanzar el valor de retorno deread()
tochar
es el camino correcto a seguir (después de verificar si es -1 o no) ... pero normalmente es más eficiente y conveniente llamarread(char[], int, int)
para leer un bloque completo de texto a la vez. Sin embargo, no olvide verificar el valor de retorno para ver cuántos caracteres se han leído.fuente
InputStreamReader
en aBufferedReader
, como se menciona en el javadoc docs.oracle.com/javase/8/docs/api/java/io/…Quizás estás pidiendo:
Más información:
Character.toChars(int codePoint)
fuente
toChars
suele ser inapropiado. Si está leyendo de un lector, está bien.Depende de lo que quieras decir con "convertir un int en char".
Si simplemente desea convertir el valor en el int, puede convertirlo usando la notación encasillada de Java:
Si te refieres a transformar el entero 1 en el carácter '1', puedes hacerlo así:
fuente
Si simplemente desea convertir int 5 a char '5': (Solo para enteros 0 - 9)
fuente
Fundición simple:
¿Hay alguna razón por la que esto no le funcione?
fuente
Esta solución funciona para un tamaño de longitud entero = 1.
Integer input = 9; Character.valueOf((char) input.toString().charAt(0))
si el tamaño> 1 necesitamos usar for loop e iterar.
fuente
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é codificación se encuentran sus datos.
UTF-16
Siempre que java habla de caracteres en su documentación, habla de caracteres de 16 bits.
Puede utilizar a
DataInputStream
, que tiene métodos convenientes. Para mayor eficiencia, envuélvalo en unBufferedReader
.El caso es que cada uno
readChar()
realmente ejecutará 2read
y los combinará en un carácter de 16 bits.US-ASCII
US-ASCII reserva 8 bits para codificar 1 carácter. Sin embargo, la tabla ASCII solo describe 128 caracteres posibles, por lo que 1 bit siempre está sin usar.
En este caso, simplemente puede realizar un yeso.
ASCII extendido
UTF-8, Latin-1, ANSI y muchas otras codificaciones utilizan todos los 8 bits. Los primeros 7 bits siguen la tabla ASCII y son idénticos a los de la codificación US-ASCII. Sin embargo, el octavo bit ofrece caracteres que son diferentes en todas estas codificaciones. Entonces, aquí las cosas se ponen interesantes.
Si eres un vaquero y crees que el octavo bit no importa (es decir, no te importan los personajes como "à, é, ç, è, ô ...) entonces puedes salirte con la tuya con un elenco simple.
Sin embargo, si desea hacer esto de manera profesional, debe especificar SIEMPRE un juego de caracteres cada vez que importe / exporte texto (por ejemplo, sockets, archivos ...).
Utilice siempre juegos de caracteres
Pongámonos serios. Todas las opciones anteriores son trucos baratos. Si desea escribir software flexible, debe admitir un juego de caracteres configurable para importar / exportar sus datos. Aquí tienes una solución genérica:
Lea sus datos usando un
byte[]
búfer y conviértalo aString
usando un parámetro de juego de caracteres .También puede usar un
InputStreamReader
que se puede instanciar con un parámetro charset.Solo una regla de oro más: nunca envíes directamente un byte a un personaje. Eso es siempre un error.
fuente
Basando mi respuesta en la suposición de que el usuario solo quería convertir literalmente un
int
achar
, por ejemploEsto ya se ha respondido anteriormente, sin embargo, si el valor entero
i > 10
, entonces necesita usarchar array
.fuente
fuente
Esto depende completamente de la codificación de los datos entrantes.
fuente
tal vez no sea el más rápido:
fuente
La respuesta para la conversión de char a int o long es una conversión simple.
Por ejemplo: - si desea convertir Char '0' en long.
Seguir elenco simple
¡¡Hecho!!
fuente