Probabilmente è stata data una risposta altrove, ma come si ottiene il valore del carattere di un valore int?
In particolare, sto leggendo a da un flusso tcp e il metodo .read () dei lettori restituisce un int.
Come ottengo un carattere da questo?
Probabilmente è stata data una risposta altrove, ma come si ottiene il valore del carattere di un valore int?
In particolare, sto leggendo a da un flusso tcp e il metodo .read () dei lettori restituisce un int.
Come ottengo un carattere da questo?
Risposte:
Se stai tentando di convertire uno stream in testo, devi essere consapevole di quale codifica desideri utilizzare. È quindi possibile passare un array di byte al Stringcostruttore e fornire un Charset, oppure utilizzare InputStreamReadercon il metodo appropriato Charset.
Il semplice casting da inta charfunziona solo se si desidera ISO-8859-1, se si leggono direttamente i byte da un flusso.
EDIT: Se si sta già utilizzando una Reader, poi gettando il valore restituito read()al charè la strada giusta da percorrere (dopo aver verificato che si tratti di -1 o meno) ... ma è normalmente più efficiente e conveniente per chiamare read(char[], int, int)a leggere un intero blocco di testo alla volta. Non dimenticare di controllare il valore restituito, per vedere quanti caratteri sono stati letti.
InputStreamReaderin un BufferedReader, come menzionato in javadoc docs.oracle.com/javase/8/docs/api/java/io/…
Forse stai chiedendo:
Character.toChars(65) // returns ['A']
Ulteriori informazioni: Character.toChars(int codePoint)
Converte il carattere specificato (punto di codice Unicode) nella relativa rappresentazione UTF-16 archiviata in una matrice di caratteri. Se il punto di codice specificato è un valore BMP (Basic Multilingual Plane o Plane 0), la matrice di caratteri risultante ha lo stesso valore di codePoint. Se il punto di codice specificato è un punto di codice supplementare, la matrice di caratteri risultante ha la coppia surrogata corrispondente.
toCharssolito è inappropriata. Se sta leggendo da un lettore, allora va bene.
Dipende da cosa intendi per "converti un int in char".
Se desideri semplicemente eseguire il cast del valore nell'int, puoi eseguire il cast utilizzando la notazione typecast di Java:
int i = 97; // 97 is 'a' in ASCII
char c = (char) i; // c is now 'a'
Se intendi trasformare il numero intero 1 nel carattere '1', puoi farlo in questo modo:
if (i >= 0 && i <= 9) {
char c = Character.forDigit(i, 10);
....
}
Se vuoi semplicemente convertire int 5 in char '5': (solo per interi 0-9)
int i = 5;
char c = (char) ('0' + i); // c is now '5';
Colata semplice:
int a = 99;
char c = (char) a;
C'è qualche motivo per cui questo non funziona per te?
La maggior parte delle risposte qui propone scorciatoie, che possono portarti a grossi problemi se non hai idea di cosa stai facendo. Se vuoi prendere scorciatoie, devi sapere esattamente in quale codifica si trovano i tuoi dati.
Ogni volta che Java parla di caratteri nella sua documentazione, parla di caratteri a 16 bit.
Puoi usare a DataInputStream, che ha metodi convenienti. Per efficienza, avvolgilo in un file BufferedReader.
// e.g. for sockets
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
char character = readChar(); // no need to cast
Il fatto è che ognuno readChar()eseguirà effettivamente 2 reade li combinerà in un carattere a 16 bit.
US-ASCII riserva 8 bit per codificare 1 carattere. La tabella ASCII descrive solo 128 possibili caratteri, quindi 1 bit è sempre inutilizzato.
In questo caso puoi semplicemente eseguire un cast.
int input = stream.read();
if (input < 0) throw new EOFException();
char character = (char) input;
UTF-8, Latin-1, ANSI e molte altre codifiche utilizzano tutti gli 8 bit. I primi 7 bit seguono la tabella ASCII e sono identici a quelli della codifica US-ASCII. Tuttavia, l'ottavo bit offre caratteri diversi in tutte queste codifiche. Quindi, qui le cose si fanno interessanti.
Se sei un cowboy e pensi che l'ottava parte non abbia importanza (cioè non ti interessano personaggi come "à, é, ç, è, ô ...) allora puoi farla franca con un cast semplice.
Tuttavia, se vuoi farlo professionalmente, dovresti davvero specificare SEMPRE un set di caratteri ogni volta che importi / esporti testo (es. Socket, file ...).
Facciamo sul serio. Tutte le opzioni di cui sopra sono trucchi economici. Se vuoi scrivere un software flessibile, devi supportare un set di caratteri configurabile per importare / esportare i tuoi dati. Ecco una soluzione generica:
Leggi i tuoi dati utilizzando un byte[]buffer e convertili in un String parametro charset .
byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);
Puoi anche usare un InputStreamReaderche può essere istanziato con un parametro charset.
Ancora una regola d'oro: non lanciare mai direttamente un byte a un personaggio. È sempre un errore.
Basando la mia risposta sul presupposto che l'utente volesse solo convertire letteralmente un intin char, per esempio
Input:
int i = 5;
Output:
char c = '5'
Questo è già stato risposto sopra, tuttavia, se il valore intero i > 10, è necessario utilizzare char array.
char[] c = String.valueOf(i).toCharArray();
int i = 7;
char number = Integer.toString(i).charAt(0);
System.out.println(number);
forse non il più veloce:
//for example there is an integer with the value of 5:
int i = 5;
//getting the char '5' out of it:
char c = String.format("%s",i).charAt(0);
La risposta per la conversione di char in int o long è il semplice casting.
Ad esempio: - se desideri convertire Char '0' in long.
Segui il cast semplice
Char ch='0';
String convertedChar= Character.toString(ch); //Convert Char to String.
Long finalLongValue=Long.parseLong(convertedChar);
Fatto!!
public int read(char[] cbuf)risolverà il problema?