Convertir int a char en java

124

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?

usuario2640480
fuente
9
"¿ Convertir un int en un char? " Quizás, b = (char)('0' + a)pero solo para 0 <= a <= 9.
johnchen902
6
El valor decimal 01 es un carácter no imprimible; está funcionando correctamente.
apraetor

Respuestas:

109
int a = 1;
char b = (char) a;
System.out.println(b);

imprimirá el carácter con el valor ascii 1 (carácter de inicio del encabezado, que no se puede imprimir).

int a = '1';
char b = (char) a;
System.out.println(b);

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 intvalor ascii, puede usar, Character.toChars(48)por ejemplo.

jh314
fuente
2
System.out.println('b'+3);cómo puedo conseguir b3en su lugar 101con el uso de println? de otra manera en lugar de printf?
Asif Mushtaq
2
@UnKnown Necesita convertirlo en una cadena en lugar de un carácter como sigue System.out.println ("b" + 3);
Haggra
Character.toCharsopera en puntos de código Unicode, no en valores ASCII. Obtienes lo mismo (solo para BMP) si simplemente lanzas int a char.
debilnespase
55

Mi respuesta es similar a la respuesta de jh314, pero la explicaré un poco más.

Lo que debe hacer en este caso es:

int a = 1;
char b = (char)(a + '0');
System.out.println(b);

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:

(char)(49)

Hemos lanzado inta char. 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.

Haggra
fuente
42

Parece que estás buscando el Character.forDigitmétodo:

final int RADIX = 10;
int i = 4;
char ch = Character.forDigit(i, RADIX);
System.out.println(ch); // Prints '4'

También hay un método que puede convertir de un char a un int:

int i2 = Character.digit(ch, RADIX);
System.out.println(i2); // Prints '4'

Tenga en cuenta que al cambiar el RADIXtambién puede admitir hexadecimal (radix 16) y cualquier radix hasta 36 (o Character.MAX_RADIXcomo también se le conoce).

Simon Forsberg
fuente
@ProgrammingNub Define "el valor del int". ¿No quieres que imprima el dígito 4? ¿O le gustaría imprimir el valor Ascii del int, para que se 65imprima A? Porque mi respuesta aquí imprime el comportamiento esperado para los requisitos de esta pregunta. Ver ideone.com/09LAFR
Simon Forsberg
10
int a = 1;
char b = (char) a;
System.out.println(b);

hola, bueno, pasé por el mismo problema, pero lo que hice fue el siguiente código.

int a = 1
char b = Integer.toString(a).charAt(0);
System.out.println(b);

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.

3ryck
fuente
3
int a = 1;
char b = (char) (a + 48);

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

char b = '2';
int a = b = 50;
gran cerdo
fuente
1

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.

apraetor
fuente
1

Siempre que escriba cast integer to char, devolverá el valor ascii de ese int (una vez que revise la tabla ascii para una mejor comprensión)

    int a=68;
    char b=(char)a;

    System.out.println(b);//it will return ascii value of 68

    //output- D
ajay verma
fuente
2
Una especie de ... chares 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.
Tom Blodget
0

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 :

int a = 1;
String b = toString(a);
System.out.println(b);

Esto funcionará cualquiera que sea la codificación de su sistema y funcionará para números de varios dígitos.

david25272
fuente
1
Lo siento, pero un char no es un int, porque está hecho de un número diferente de bytes (ref. Rápida representación char-int - stackoverflow ). Un carácter se puede representar con un número, tiene razón, pero no es un número entero.
morels
Además, creo que puede encontrar que la segunda línea debería leer "String b = Integer.toString (a);"
Defectuoso
El tipo de datos char está bien definido en java.lang.Character , así como su relación con los puntos de código int y unicode y las unidades de código.
Ian
0

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:

public static void main(String[] args) {
    byte b = 65;
    for (byte i=b; i<=b+25; i++) {
        System.out.print((char)i + ", ");
    }

Por cierto, el código ascii para la letra 'A' es 65

MohS
fuente
0

Asegúrese de que el valor entero sea el valor ASCII de un alfabeto / carácter.

Si no, hazlo.

for e.g. if int i=1

luego agregue 64 para que se convierta en 65 = valor ASCII de 'A' Luego use

char x = (char)i;

print x

// 'A' will be printed 
Mayur Gudi
fuente
0

Si estamos hablando de tipos de clases, no de primitivas, se debe hacer el siguiente truco:

Integer someInt;
Character someChar;

someChar = (char)Integer.parseInt(String.valueOf(someInt));
matua
fuente
No es necesario convertirlo en una cadena en el proceso, y tiene un número de paréntesis que no coincide.
Simon Forsberg
Simon, "paréntesis". Aconsejar cómo entonces?
matua
-1

mire el siguiente programa para el concepto de conversión completo

class typetest{
    public static void main(String args[]){
        byte a=1,b=2;
        char c=1,d='b';
        short e=3,f=4;
        int g=5,h=6;
        float i;
        double k=10.34,l=12.45;
        System.out.println("value of char variable c="+c);
        // if we assign an integer value in char cariable it's possible as above
        // but it's not possible to assign int value from an int variable in char variable 
        // (d=g assignment gives error as incompatible type conversion)
        g=b;
        System.out.println("char to int conversion is possible");
        k=g;
        System.out.println("int to double conversion is possible");
        i=h;
        System.out.println("int to float is possible and value of i = "+i);
        l=i;
        System.out.println("float to double is possible");
    }
}

espero, ayudará al menos en algo

Shivam Rai
fuente
-2

Si desea convertir un carácter en su número entero correspondiente, puede hacer algo como esto:

int a = (int) 'a';
char b = (char) a;
System.out.println(b);

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.

Raúl Londoño Murillo
fuente
-2
public class String_Store_In_Array 
{
    public static void main(String[] args) 
    {
        System.out.println(" Q.37 Can you store string in array of integers. Try it.");

        String str="I am Akash";
        int arr[]=new int[str.length()];
        char chArr[]=str.toCharArray();
          char  ch;
        for(int i=0;i<str.length();i++)
        {

            arr[i]=chArr[i];
        }
        System.out.println("\nI have stored it in array by using ASCII value");
        for(int i=0;i<arr.length;i++)
        {

            System.out.print(" "+arr[i]);
        }
        System.out.println("\nI have stored it in array by using ASCII value to original content");
        for(int i=0;i<arr.length;i++)
        {
             ch=(char)arr[i];

            System.out.print(" "+ch);
        }
    }
}
Akash Dhotre
fuente
2
Proporcione una explicación en lugar de solo un volcado de código.
Jules Dupont
Si bien esta publicación de solo código puede responder la pregunta, agregue una explicación de por qué lo hace. Esto ayudará a los futuros usuarios a evaluar la respuesta a su situación.
Tom Brunberg