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?
b = (char)('0' + a)
mas apenas para0 <= a <= 9
.Respostas:
imprimirá o caractere com valor ASCII 1 (caractere de início de cabeçalho, que não é imprimível).
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
int
valor como em ascii, pode usar,Character.toChars(48)
por exemplo.fonte
System.out.println('b'+3);
como posso obterb3
vez101
com o uso de println? qualquer outra maneira, em vez printf?Character.toChars
opera 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.Minha resposta é semelhante à resposta de jh314, mas vou explicar um pouco mais a fundo.
O que você deve fazer neste caso é:
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 é:Nós escalado
int
parachar
. 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.fonte
Parece que você está procurando o
Character.forDigit
método:Há também um método que pode converter de um char de volta para um int:
Observe que, alterando o,
RADIX
você também pode suportar hexadecimal (raiz 16) e qualquer raiz até 36 (ouCharacter.MAX_RADIX
como também é conhecido como).fonte
65
impressoA
? Porque minha resposta aqui imprime o comportamento esperado para os requisitos desta pergunta. Veja ideone.com/09LAFROlá, passei pelo mesmo problema, mas o que fiz foi o seguinte código.
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.
fonte
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
fonte
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.
fonte
fonte
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.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 :Isso funcionará independentemente da codificação do seu sistema e funcionará para números de vários dígitos.
fonte
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:
BTW, o código ascii da letra 'A' é 65
fonte
Verifique se o valor inteiro é o valor ASCII de um alfabeto / caractere.
Se não, então faça.
adicione 64 a ele para que ele se torne 65 = valor ASCII de 'A'. Em seguida, use
fonte
Se estamos falando de tipos de classe - não primitivos, o seguinte truque deve ser feito:
fonte
espero que ajude pelo menos alguma coisa
fonte
Se você deseja converter um caractere em seu número inteiro correspondente, pode fazer algo assim:
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.
fonte
fonte