¿Cómo convertir el código ASCII (0-255) a su carácter correspondiente?

135

¿Cómo puedo convertir, en Java, el código ASCII (que es un entero del rango [0, 255]) a su carácter ASCII correspondiente?

Por ejemplo:

65  -> "A"
102 -> "f"
Belgi
fuente
3
esto no es un duplicado como se mencionó anteriormente. Esto no es conversión de entero sino de char (ascii)
Chathuranga Chandrasekara
11
No es un duplicado de "¿Cómo convertir de int a String?" ... de todos modos, FWIW, ASCII es solo de 7 bits con valores [0, 127] ;-)
1
@phooji Creo que esa publicación dice cómo convertir 1 -> "1", etc. '
Belgi
1
@pst - se extiende ASII ;-)
Belgi
3
@Belgi: deberá indicar explícitamente su codificación si desea transcodificar correctamente los valores 128-255. El término "ASCII extendido" no tiene sentido.
McDowell

Respuestas:

244

Character.toString ((char) i);

Chathuranga Chandrasekara
fuente
Para plataformas basadas en MIDP 2 / CLDC 1.1 (que no tienen Character.toString(char), stackoverflow.com/a/6210938/923560 proporciona soluciones adicionales.)
Abdull
¿Cuál es el motivo de la (char)designación? En otras palabras, ¿por qué no puedo simplemente poner Character.toString(i);? (Novato de Java)
Adam Hughes
1
Tenga en cuenta que esto no funcionará para el Integertipo, obtendrá un error "java.lang.Integer no se puede convertir en java.lang.Character". Agregue un elenco al intprimero, por ejemplo: Character.toString((char)(int)myInteger);
gbmhunter
1
Los ivalores (0-255) serían del conjunto de caracteres ISO-8859-1. (El autor de la pregunta no quiso identificar qué "ASCII extendido" [término vago] era deseado, excepto al aceptar esta respuesta.)
Tom Blodget
59

System.out.println((char)65); imprimiría "A"

RylandAlmanza
fuente
2
Consejo de REPL: si está utilizando JShell (Java 9), puede omitir System.out. Simplemente escriba (char) 65para averiguar qué personaje es.
DavidS
2
La pregunta no se trata de imprimir sino de convertir.
iAmLearning
29

String.valueOf(Character.toChars(int))

Suponiendo que el entero esté, como usted dice, entre 0 y 255, obtendrá una matriz con un solo carácter Character.toChars, que se convertirá en una cadena de un solo carácter cuando se pase aString.valueOf .

El uso Character.toCharses preferible a los métodos que involucran una conversión de inta char(es decir (char) i) por una serie de razones, incluida la que Character.toCharsarrojará un IllegalArgumentExceptionerror si no valida correctamente el entero mientras que la conversión se tragará el error (según la especificación de conversiones primitivas de estrechamiento ), lo que podría dar una salida diferente a la que pretendía.

zjs
fuente
Suponiendo que el número entero está en el rango de 0 a 255 (como usted dice que lo hace ... y como lo especifica la pregunta), es innecesario y subóptimo de usar toChars.
Stephen C
55
Tienes toda la razón de que algo así Character.toString((char) i)es más rápido que String.valueOf(Character.toChars(i)). Ejecutar un punto de referencia rápido para convertir 1,000,000 enteros aleatorios en el rango dado (100 veces, para estar seguro) en mi máquina da un tiempo promedio de 153.07 nanosegundos frente a 862.39 nanosegundos. Sin embargo, en cualquier aplicación interesante, habrá cosas mucho más importantes para optimizar. El valor agregado del manejo seguro y determinista y la facilidad de expansión fuera del rango [0,255] en caso de que sea necesario supera el impacto de rendimiento menor.
zjs
8
int number = 65;
char c = (char)number;

es una solucion simple

Atenea
fuente
4
    new String(new char[] { 65 })

Terminará con una cadena de longitud uno, cuyo carácter único tiene el código (ASCII) 65. En Java, los caracteres son tipos de datos numéricos.

Paul Cager
fuente
1

Uno puede iterar de la A a la Z así

int asciiForLowerA = 97;
int asciiForLowerZ = 122;
for(int asciiCode = asciiForLowerA; asciiCode <= asciiForLowerZ; asciiCode++){
    search(sCurrentLine, searchKey + Character.toString ((char) asciiCode));
}
Tez Kurmala
fuente
1

Una forma más fácil de hacer lo mismo:

Escriba cast integer to character, int nsea ​​el entero, luego:

Char c=(char)n;
System.out.print(c)//char c will store the converted value.
Entriple Aardee
fuente
0
    for (int i = 0; i < 256; i++) {
        System.out.println(i + " -> " + (char) i);
    }

    char lowercase = 'f';
    int offset = (int) 'a' - (int) 'A';
    char uppercase = (char) ((int) lowercase - offset);
    System.out.println("The uppercase letter is " + uppercase);

    String numberString = JOptionPane.showInputDialog(null,
            "Enter an ASCII code:",
            "ASCII conversion", JOptionPane.QUESTION_MESSAGE);

    int code = (int) numberString.charAt(0);
    System.out.println("The character for ASCII code "
            + code + " is " + (char) code);
Kazım Fuat Akdemir
fuente
Explique su respuesta por favor
want2learn
0

¿Por qué no simplificarlo a un método que devuelve el carácter ascii?

public char toAscii (int input) {
    return (char)input;
}
Zafiro_Brick
fuente
-1

Este es un ejemplo, que muestra que al convertir un int a char, se puede determinar el carácter correspondiente a un código ASCII.

public class sample6
{
    public static void main(String... asf)
    {

        for(int i =0; i<256; i++)
        {
            System.out.println( i + ". " + (char)i);
        }
    }
}
Prakash Hadgal
fuente
-1

respuesta superior solo cerca de resolver el problema. Heres su respuesta:

Integer.decode (Character.toString (char c));

Notario Maximiliano
fuente