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"

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

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"


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.


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


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.


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));
}

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.

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);

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;
}

-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);
        }
    }
}

-1

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

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.