Isso provavelmente já foi respondido em outro lugar, mas como você obtém o valor do caractere de um valor int?
Especificamente, estou lendo um de um fluxo tcp e o método .read () dos leitores retorna um int.
Como faço para obter um caractere disso?
public int read(char[] cbuf)
resolva o problema?Respostas:
Se você está tentando converter um fluxo em texto, precisa estar ciente de qual codificação deseja usar. Você pode então passar um array de bytes para o
String
construtor e fornecer umCharset
, ou usarInputStreamReader
com o apropriadoCharset
.A simples transmissão de
int
parachar
só funciona se você quiser ISO-8859-1, se estiver lendo bytes de um fluxo diretamente.EDITAR: se você já estiver usando um
Reader
, então lançar o valor de retorno deread()
parachar
é o caminho certo (depois de verificar se é -1 ou não) ... mas normalmente é mais eficiente e conveniente chamarread(char[], int, int)
para ler um bloco inteiro de texto de cada vez. Não se esqueça de verificar o valor de retorno, para ver quantos caracteres foram lidos.fonte
InputStreamReader
em aBufferedReader
, conforme mencionado no javadoc docs.oracle.com/javase/8/docs/api/java/io/…Talvez você esteja pedindo:
Mais informações:
Character.toChars(int codePoint)
fonte
toChars
geralmente é inadequada. Se ele está lendo de um Reader, tudo bem.Depende do que você entende por "converter um int em char".
Se você simplesmente deseja lançar o valor no int, pode lançá-lo usando a notação typecast do Java:
Se você quer transformar o inteiro 1 no caractere '1', pode fazer assim:
fonte
Se você deseja simplesmente converter int 5 em char '5': (somente para inteiros 0 - 9)
fonte
Elenco simples:
Existe alguma razão para que isso não esteja funcionando para você?
fonte
Esta solução funciona para tamanho de comprimento inteiro = 1.
Integer input = 9; Character.valueOf((char) input.toString().charAt(0))
se o tamanho> 1, precisamos usar o loop e iterar.
fonte
A maioria das respostas aqui propõe atalhos, que podem trazer grandes problemas se você não tiver ideia do que está fazendo. Se você quiser usar atalhos, precisa saber exatamente em que codificação seus dados estão.
UTF-16
Sempre que java fala sobre personagens em sua documentação, ele fala sobre personagens de 16 bits.
Você pode usar um
DataInputStream
, que possui métodos convenientes. Para maior eficiência, embrulhe-o em umBufferedReader
.O fato é que cada um
readChar()
irá realmente executar 2read
's e combiná-los em um caractere de 16 bits.US-ASCII
US-ASCII reserva 8 bits para codificar 1 caractere. A tabela ASCII descreve apenas 128 caracteres possíveis, portanto, 1 bit está sempre não utilizado.
Você pode simplesmente executar um elenco neste caso.
ASCII estendido
UTF-8, Latin-1, ANSI e muitas outras codificações usam todos os 8 bits. Os primeiros 7 bits seguem a tabela ASCII e são idênticos aos da codificação US-ASCII. No entanto, o 8º bit oferece caracteres diferentes em todas essas codificações. Então, aqui as coisas ficam interessantes.
Se você é um cowboy e acha que o 8º bit não importa (ou seja, você não se importa com personagens como "à, é, ç, è, ô ...) então você pode se safar com um elenco simples.
No entanto, se você quiser fazer isso profissionalmente, você deve realmente SEMPRE especificar um conjunto de caracteres sempre que importar / exportar texto (por exemplo, sockets, arquivos ...).
Sempre use conjuntos de caracteres
Vamos falar sério. Todas as opções acima são truques baratos. Se você deseja escrever um software flexível, você precisa oferecer suporte a um conjunto de caracteres configurável para importar / exportar seus dados. Aqui está uma solução genérica:
Leia seus dados usando um
byte[]
buffer e converta-os em umString
parâmetro charset .Você também pode usar um
InputStreamReader
que pode ser instanciado com um parâmetro charset.Só mais uma regra de ouro: nunca lance um byte diretamente para um personagem. Isso sempre é um erro.
fonte
Baseando minha resposta na suposição de que o usuário queria apenas converter literalmente um
int
parachar
, por exemploIsso já foi respondido acima, porém se for o valor inteiro
i > 10
, então precisa usarchar array
.fonte
fonte
Isso depende inteiramente da codificação dos dados recebidos.
fonte
talvez não seja o mais rápido:
fonte
A resposta para a conversão de char em int ou long é a conversão simples.
Por exemplo: - se deseja converter o caractere '0' em longo.
Seguir elenco simples
Feito!!
fonte