Converter int para char em java

124

Abaixo está um trecho de código,

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

Mas o que recebo é uma saída vazia.

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

Vou receber 1 como minha saída.

Alguém pode explicar isso? E se eu quiser converter um int em um caractere como no primeiro snippet, o que devo fazer?

user2640480
fonte
9
" Converter um int em um caractere? " Talvez, b = (char)('0' + a)mas apenas para 0 <= a <= 9.
precisa saber é o seguinte
6
O valor decimal 01 é um caractere não imprimível; está funcionando corretamente.
apraetor 12/09/16

Respostas:

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

imprimirá o caractere com valor ASCII 1 (caractere de início de cabeçalho, que não é imprimível).

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

imprimirá o caractere com o valor ascii 49 (um correspondente a '1')

Se você deseja converter um dígito (0-9), pode adicionar 48 e converter, ou algo assim Character.forDigit(a, 10);.

Se você deseja converter um intvalor como em ascii, pode usar, Character.toChars(48)por exemplo.

jh314
fonte
2
System.out.println('b'+3);como posso obter b3vez 101com o uso de println? qualquer outra maneira, em vez printf?
Asif Mushtaq
2
@UnKnown Você precisa torná-lo uma string em vez de um caractere, como segue System.out.println ("b" + 3);
precisa saber é o seguinte
Character.toCharsopera em pontos de código Unicode, não em valores ASCII. Você obtém o mesmo (apenas para BMP) se apenas converter int para char.
weaknespase
55

Minha resposta é semelhante à resposta de jh314, mas vou explicar um pouco mais a fundo.

O que você deve fazer neste caso é:

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

Aqui, usamos '0' porque os caracteres são realmente representados por valores ASCII. '0' é um caractere e representado pelo valor de 48.

Digitamos (a + '0')e, para adicioná-los, o Java converteu '0' em seu valor ASCII, que é 48 e a é 1, então a soma é 49. Então, o que fizemos é:

(char)(49)

Nós escalado intpara char. O equivalente ASCII de 49 é '1'. Você pode converter qualquer dígito em char dessa maneira e é mais inteligente e melhor do que usar o .toString()método e subtrair o dígito por .charAt()método.

Haggra
fonte
42

Parece que você está procurando o Character.forDigitmétodo:

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

Há também um método que pode converter de um char de volta para um int:

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

Observe que, alterando o, RADIXvocê também pode suportar hexadecimal (raiz 16) e qualquer raiz até 36 (ou Character.MAX_RADIXcomo também é conhecido como).

Simon Forsberg
fonte
@ProgrammingNub Defina "o valor do int". . Você não deseja que ele imprima o dígito 4? Ou você gostaria de imprimir o valor ASCII do int, para que seja 65impresso A? Porque minha resposta aqui imprime o comportamento esperado para os requisitos desta pergunta. Veja ideone.com/09LAFR
Simon Forsberg
10
int a = 1;
char b = (char) a;
System.out.println(b);

Olá, passei pelo mesmo problema, mas o que fiz foi o seguinte código.

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

Com isso, você obtém o valor decimal como um tipo de caractere. Eu usei charAt () com o índice 0 porque o único valor nessa String é 'a' e, como você sabe, a posição de 'a' nessa String começa em 0.

Desculpe se o meu inglês não está bem explicado, espero que ajude.

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

No ASCII, cada caractere tem seu próprio número. E o caractere '0' é 48 para decimal, '1' é 49 e assim por diante. Então se

char b = '2';
int a = b = 50;
Porco grande
fonte
1

Ninguém respondeu a verdadeira "pergunta" aqui: você está convertendo int para char corretamente; na tabela ASCII, um valor decimal 01 é "início do cabeçalho", um caractere não imprimível. Tente procurar uma tabela ASCII e converter um valor int entre 33 e 7E; que lhe dará personagens para olhar.

apraetor
fonte
1

Sempre que você digitar cast integer para char, ele retornará o valor ascii desse int (uma vez percorra a tabela ascii para entender melhor)

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

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

    //output- D
ajay verma
fonte
2
Sort of .... charé uma unidade de código UTF-16. 68 como uma unidade de código UTF-16 é a única unidade de código necessária para representar o ponto de código Unicode U + 0044 . System.out mudará a codificação do texto para a codificação padrão (provavelmente correspondendo ao terminal / console em que o programa está sendo executado). println pega um caractere e tenta codificá-lo. Como o char é um ponto de código completo, ele pode tentar. Como U + 0044 é um caractere em quase todos os conjuntos de caracteres, deve haver êxito em obtê-lo no terminal sem distorção. Nada a ver com ASCII.
TomTodododd
0

Em java, um char é um int. Seu primeiro trecho imprime o caractere correspondente ao valor de 1 no esquema de codificação de caracteres padrão (que provavelmente é Unicode). O caractere Unicode U + 0001 é um caractere não imprimível, e é por isso que você não vê nenhuma saída.

Se você deseja imprimir o caractere '1', pode procurar o valor de '1' no esquema de codificação que está usando. No Unicode, isso é 49 (o mesmo que ASCII). Mas isso funcionará apenas para os dígitos de 0 a 9.

Você pode estar melhor usando uma String em vez de um char e usando o toString()método interno do Java :

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

Isso funcionará independentemente da codificação do seu sistema e funcionará para números de vários dígitos.

david25272
fonte
1
Desculpe, mas um char não é um int, porque é composto por um número diferente de bytes (referência rápida char-int representação - stackoverflow ). Um caractere pode ser representado por um número, você está certo, mas não é um número inteiro.
morels
Além disso, acho que você pode achar que a segunda linha deve ler "String b = Integer.toString (a);"
defeito
O tipo de dados char está bem definido em java.lang.Character , bem como seu relacionamento com pontos de código int e unicode e unidades de código.
26417 Ian
0

se você deseja imprimir caracteres ascii com base em seu código ascii e não deseja ir além (como caracteres unicode), pode definir sua variável como um byte e usar o (char) convert. ou seja:

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

BTW, o código ascii da letra 'A' é 65

MohS
fonte
0

Verifique se o valor inteiro é o valor ASCII de um alfabeto / caractere.

Se não, então faça.

for e.g. if int i=1

adicione 64 a ele para que ele se torne 65 = valor ASCII de 'A'. Em seguida, use

char x = (char)i;

print x

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

Se estamos falando de tipos de classe - não primitivos, o seguinte truque deve ser feito:

Integer someInt;
Character someChar;

someChar = (char)Integer.parseInt(String.valueOf(someInt));
matua
fonte
Não há necessidade de torná-lo uma String no processo, e você tem um número incompatível de parênteses.
Simon Forsberg
Simon, "parênteses". Aconselhar como então?
matua 6/06
-1

veja o programa a seguir para obter o conceito completo de conversão

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 que ajude pelo menos alguma coisa

Shivam Rai
fonte
-2

Se você deseja converter um caractere em seu número inteiro correspondente, pode fazer algo assim:

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

Isso acontece porque no ASCII existem alguns itens que não podem ser impressos normalmente.

Por exemplo, os números 97 a 122 são números inteiros correspondentes às letras minúsculas de a a z.

Raul Londoño Murillo
fonte
-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
fonte
2
Forneça uma explicação em vez de apenas um despejo de código.
Jules Dupont
Embora esta postagem apenas de código possa responder à pergunta, inclua uma explicação do motivo. Isso ajudará os usuários futuros a avaliar a resposta para sua situação.
Tom Brunberg 03/02