Como converter o código ASCII (0-255) para o caractere correspondente?

135

Como posso converter, em Java, o código ASCII (que é um número inteiro do intervalo [0, 255]) para seu caractere ASCII correspondente?

Por exemplo:

65  -> "A"
102 -> "f"
Belgi
fonte
3
isso não é uma duplicata, como mencionado acima. Esta não é a conversão de número inteiro, mas a partir de carvão (ASCII)
Chathuranga Chandrasekara
11
Não uma duplicata "? Como converter de int para String" ... de qualquer maneira, FWIW, ASCII é de apenas 7-bits com valores [0, 127] ;-)
1
@phooji Eu acho que esse post sais como converter 1 -> "1" etc ''
Belgi 8/10
1
@pst - é estendida ASII ;-)
Belgi
3
@Belgi - você precisará declarar explicitamente sua codificação se desejar transcodificar corretamente os valores 128-255. O termo "ASCII estendido" não é significativo.
McDowell

Respostas:

244

Character.toString ((char) i);

Chathuranga Chandrasekara
fonte
Para MIDP 2 / 1,1 CLCA baseado plataformas (que não têm Character.toString(char), stackoverflow.com/a/6210938/923560 fornece soluções adicionais.
Abdull
Qual o motivo da (char)designação? Em outras palavras, por que não posso simplesmente colocar Character.toString(i);? (Java noob)
Adam Hughes
1
Observe que isso não funcionará para o Integertipo, você receberá o erro "java.lang.Integer não pode ser convertido para java.lang.Character". Adicione um elenco ao intprimeiro, por exemplo: Character.toString((char)(int)myInteger);
gbmhunter
1
Os ivalores (0-255) seriam do conjunto de caracteres ISO-8859-1. (O autor da questão pergunta se recusou a identificar quais "ASCII estendido" [termo vago] foi queria, exceto aceitando esta resposta.)
Tom Blodget
59

System.out.println((char)65); imprimiria "A"

RylandAlmanza
fonte
2
Dica do REPL: Se você estiver usando o JShell (Java 9), poderá omitir o System.out. Basta digitar (char) 65para descobrir qual personagem é.
Davids
2
A pergunta não é sobre impressão, mas sobre conversão.
iAmLearning
29

String.valueOf(Character.toChars(int))

Supondo que o número inteiro esteja, como você diz, entre 0 e 255, você receberá uma matriz com um único caractere Character.toChars, que se tornará uma cadeia de caracteres únicos quando transmitida para String.valueOf.

O uso Character.toCharsé preferível a métodos que envolvem uma conversão de intpara char( (char) ipor exemplo) por vários motivos, incluindo que Character.toCharslançará um IllegalArgumentExceptionse você não conseguir validar corretamente o número inteiro enquanto a conversão engolirá o erro (conforme a especificação de conversões primitivas ), potencialmente fornecendo uma saída diferente da que você pretendia.

zjs
fonte
Supondo que o número inteiro esteja no intervalo de 0 a 255 (como você declara ... e como a pergunta especifica), é desnecessário e subótimo de usar toChars.
Stephen C
5
Você está completamente correto de que algo assim Character.toString((char) i)é mais rápido que String.valueOf(Character.toChars(i)). A execução de uma referência rápida de conversão de 1.000.000 de números inteiros aleatórios no intervalo especificado (100 vezes, para ser seguro) em minha máquina fornece um tempo médio de 153,07 nanossegundos contra 862,39 nanossegundos. No entanto, em qualquer aplicativo interessante, haverá coisas muito mais importantes para otimizar. O valor agregado do manuseio seguro e determinístico e a facilidade de expansão fora da faixa [0,255], caso necessário, superam o menor impacto no desempenho.
perfil completo de zjs
8
int number = 65;
char c = (char)number;

é uma solução simples

athena
fonte
4
    new String(new char[] { 65 })

Você terminará com uma sequência de comprimento um, cujo caractere único possui o código (ASCII) 65. Em Java, chars são tipos de dados numéricos.

Paul Cager
fonte
1

Pode-se iterar de a a z como este

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

Uma maneira mais fácil de fazer o mesmo:

Digite converter inteiro para caractere, int nseja o inteiro e, em seguida:

Char c=(char)n;
System.out.print(c)//char c will store the converted value.
Entriple Aardee
fonte
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
fonte
Explique sua resposta, por favor
want2learn 2/17/17
0

Por que não simplificá-lo para um método que retorna o caractere ascii?

public char toAscii (int input) {
    return (char)input;
}
Sapphire_Brick
fonte
-1

Este é um exemplo, que mostra que, ao converter um int em char, é possível determinar o caractere correspondente em um 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
fonte
-1

resposta superior apenas perto de resolver o problema. aqui está sua resposta:

Código inteiro (Character.toString (char c));

Maximilian Notar
fonte