A continuación se muestra un fragmento de código,
int a = 1;
char b = (char) a;
System.out.println(b);
Pero lo que obtengo es una salida vacía.
int a = '1';
char b = (char) a;
System.out.println(b);
Obtendré 1 como salida.
¿Alguien puede explicar esto? Y si quiero convertir un int en un char como en el primer fragmento, ¿qué debo hacer?
b = (char)('0' + a)
pero solo para0 <= a <= 9
.Respuestas:
imprimirá el carácter con el valor ascii 1 (carácter de inicio del encabezado, que no se puede imprimir).
imprimirá el carácter con valor ascii 49 (uno correspondiente a '1')
Si desea convertir un dígito (0-9), puede agregarle 48 y transmitir, o algo como
Character.forDigit(a, 10);
.Si desea convertir un
int
valor ascii, puede usar,Character.toChars(48)
por ejemplo.fuente
System.out.println('b'+3);
cómo puedo conseguirb3
en su lugar101
con el uso de println? de otra manera en lugar de printf?Character.toChars
opera en puntos de código Unicode, no en valores ASCII. Obtienes lo mismo (solo para BMP) si simplemente lanzas int a char.Mi respuesta es similar a la respuesta de jh314, pero la explicaré un poco más.
Lo que debe hacer en este caso es:
Aquí, usamos '0' porque los caracteres en realidad están representados por valores ASCII. '0' es un carácter y está representado por el valor de 48.
Escribimos
(a + '0')
y para sumarlos, Java convirtió '0' a su valor ASCII que es 48 y a es 1, por lo que la suma es 49. Entonces lo que hicimos fue:Hemos lanzado
int
achar
. El equivalente ASCII de 49 es '1'. Puede convertir cualquier dígito a char de esta manera y es más inteligente y mejor que usar el.toString()
método y luego restar el dígito por.charAt()
método.fuente
Parece que estás buscando el
Character.forDigit
método:También hay un método que puede convertir de un char a un int:
Tenga en cuenta que al cambiar el
RADIX
también puede admitir hexadecimal (radix 16) y cualquier radix hasta 36 (oCharacter.MAX_RADIX
como también se le conoce).fuente
65
imprimaA
? Porque mi respuesta aquí imprime el comportamiento esperado para los requisitos de esta pregunta. Ver ideone.com/09LAFRhola, bueno, pasé por el mismo problema, pero lo que hice fue el siguiente código.
Con esto obtienes el valor decimal como un tipo char. Usé charAt () con índice 0 porque el único valor en esa Cadena es 'a' y, como saben, la posición de 'a' en esa Cadena comienza en 0.
Lo siento si mi inglés no está bien explicado, espero que te ayude.
fuente
En ASCII, cada carácter tiene su propio número. Y el carácter '0' es 48 para decimal, '1' es 49, y así sucesivamente. Así que si
fuente
Nadie ha respondido la "pregunta" real aquí: ESTÁ convirtiendo int a char correctamente; en la tabla ASCII, un valor decimal de 01 es "inicio de encabezado", un carácter que no se imprime. Intente buscar una tabla ASCII y convertir un valor int entre 33 y 7E; eso te dará personajes para mirar.
fuente
fuente
char
es una unidad de código UTF-16. 68 como unidad de código UTF-16 es la única unidad de código necesaria para representar el punto de código Unicode U + 0044 . System.out cambiará la codificación del texto a la codificación predeterminada (probablemente coincidiendo con la terminal / consola en la que se ejecuta el programa). println toma un char e intenta codificarlo. Dado que el carácter es un punto de código completo, puede intentarlo. Dado que U + 0044 es un carácter en casi todos los conjuntos de caracteres, debería tener éxito en llevarlo al terminal sin interferencias. Nada que ver con ASCII.En java, un char es un int. Su primer fragmento imprime el carácter correspondiente al valor de 1 en el esquema de codificación de caracteres predeterminado (que probablemente sea Unicode). El carácter Unicode U + 0001 es un carácter que no se imprime, por lo que no ve ningún resultado.
Si desea imprimir el carácter '1', puede buscar el valor de '1' en el esquema de codificación que está utilizando. En Unicode es 49 (lo mismo que ASCII). Pero esto solo funcionará para los dígitos 0-9.
Es posible que sea mejor usar un String en lugar de un char, y usar el
toString()
método integrado de Java :Esto funcionará cualquiera que sea la codificación de su sistema y funcionará para números de varios dígitos.
fuente
si desea imprimir caracteres ascii basados en su código ascii y no quiere ir más allá de eso (como caracteres unicode), puede definir su variable como un byte y luego usar la conversión (char). es decir:
Por cierto, el código ascii para la letra 'A' es 65
fuente
Asegúrese de que el valor entero sea el valor ASCII de un alfabeto / carácter.
Si no, hazlo.
luego agregue 64 para que se convierta en 65 = valor ASCII de 'A' Luego use
fuente
Si estamos hablando de tipos de clases, no de primitivas, se debe hacer el siguiente truco:
fuente
espero, ayudará al menos en algo
fuente
Si desea convertir un carácter en su número entero correspondiente, puede hacer algo como esto:
Esto sucede porque en ASCII hay algunos elementos que no se pueden imprimir normalmente.
Por ejemplo, los números del 97 al 122 son números enteros correspondientes a las letras minúsculas de la aa la z.
fuente
fuente