Bu muhtemelen başka bir yerde yanıtlanmıştır ama int değerinin karakter değerini nasıl elde edersiniz?
Özellikle bir tcp akışından bir okuyorum ve okuyucuların .read () yöntemi bir int döndürüyor.
Bundan nasıl bir karakter alabilirim?
Bu muhtemelen başka bir yerde yanıtlanmıştır ama int değerinin karakter değerini nasıl elde edersiniz?
Özellikle bir tcp akışından bir okuyorum ve okuyucuların .read () yöntemi bir int döndürüyor.
Bundan nasıl bir karakter alabilirim?
Yanıtlar:
Bir akışı metne dönüştürmeye çalışıyorsanız, hangi kodlamayı kullanmak istediğinizi bilmeniz gerekir. Daha sonra yapıcıya bir bayt dizisi geçirebilir Stringve bir Charsetveya kullanabilirsinizInputStreamReaderCharset bunun yerine uygun .
Basitçe yayın yapmak intiçinchar çevirme işlemi yalnızca ISO-8859-1 istiyorsanız, doğrudan bir akıştan bayt okuyorsanız çalışır.
DÜZENLEME: Eğer varsa vardır zaten kullanılarak Readerardından dönüş değeri döküm, read()için char(öyle -1 olup olmadığını kontrol ettikten sonra) gitmek için doğru yolu ... ama normalde daha verimli ve kullanışlı aramaya read(char[], int, int)bütün bir bloğu okumak bir seferde metin. Kaç karakterin okunduğunu görmek için dönüş değerini kontrol etmeyi unutmayın.
Belki soruyorsun:
Character.toChars(65) // returns ['A']
Daha fazla bilgi: Character.toChars(int codePoint)
Belirtilen karakteri (Unicode kod noktası) bir char dizisinde depolanan UTF-16 gösterimine dönüştürür. Belirtilen kod noktası bir BMP (Temel Çok Dilli Düzlem veya Düzlem 0) değeriyse, ortaya çıkan char dizisi, codePoint ile aynı değere sahiptir. Belirtilen kod noktası tamamlayıcı bir kod noktasıysa, ortaya çıkan karakter dizisi karşılık gelen vekil çiftine sahiptir.
toCharsgenellikle uygunsuz olduğu. Okuyucudan okuyorsa, sorun değil.
Bu, "int'i karaktere dönüştürmek" ile ne demek istediğinize bağlıdır.
Yalnızca int içindeki değeri çevirmek istiyorsanız, bunu Java'nın typecast gösterimini kullanarak çevirebilirsiniz:
int i = 97; // 97 is 'a' in ASCII
char c = (char) i; // c is now 'a'
1 tamsayısını '1' karakterine dönüştürmeyi kastediyorsanız, bunu şu şekilde yapabilirsiniz:
if (i >= 0 && i <= 9) {
char c = Character.forDigit(i, 10);
....
}
İnt 5'i char '5'e dönüştürmek istiyorsanız: (Yalnızca 0-9 tam sayıları için)
int i = 5;
char c = (char) ('0' + i); // c is now '5';
Basit döküm:
int a = 99;
char c = (char) a;
Bunun sizin için çalışmamasının herhangi bir nedeni var mı?
Buradaki yanıtların çoğu, ne yaptığınız hakkında hiçbir fikriniz yoksa size büyük sorunlara yol açabilecek kısayollar önerir. Kısayol kullanmak istiyorsanız, verilerinizin tam olarak hangi kodlamada olduğunu bilmeniz gerekir.
Java, belgelerinde karakterlerden bahsettiğinde, 16 bitlik karakterlerden bahsediyor.
DataInputStreamUygun yöntemlere sahip olan a kullanabilirsiniz . Verimlilik için, bir BufferedReader.
// e.g. for sockets
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
char character = readChar(); // no need to cast
Mesele şu ki, her biri readChar()aslında 2'leri gerçekleştirecek readve bunları 16 bitlik bir karakterde birleştirecek.
US-ASCII, 1 karakteri kodlamak için 8 bit ayırır. ASCII tablosu yalnızca 128 olası karakteri açıklar, bu nedenle 1 bit her zaman kullanılmaz.
Bu durumda basitçe bir döküm gerçekleştirebilirsiniz.
int input = stream.read();
if (input < 0) throw new EOFException();
char character = (char) input;
UTF-8, Latin-1, ANSI ve diğer birçok kodlama, tüm 8 biti kullanır. İlk 7 bit ASCII tablosunu takip eder ve US-ASCII kodlamasınınkilerle aynıdır. Ancak 8. bit, tüm bu kodlamalarda farklı olan karakterler sunar. Yani burada işler ilginçleşiyor.
Kovboy isen ve 8. bitin önemli olmadığını düşünüyorsan (yani "à, é, ç, è, ô ... gibi karakterleri umursamıyorsun) o zaman basit bir alçı ile kurtulabilirsin.
Ancak, bunu profesyonel bir şekilde yapmak istiyorsanız, gerçekten HER ZAMAN metni içeri / dışarı aktardığınızda (örneğin soketler, dosyalar ...) bir karakter seti belirlemelisiniz.
Hadi ciddileşelim. Yukarıdaki tüm seçenekler ucuz numaralardır. Esnek bir yazılım yazmak istiyorsanız, verilerinizi içe / dışa aktarmak için yapılandırılabilir bir karakter kümesini desteklemeniz gerekir. İşte genel bir çözüm:
Bir byte[]arabellek kullanarak verilerinizi okuyun ve bunu String bir karakter kümesi parametresi kullanarak dönüştürmek için .
byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);
InputStreamReaderBir karakter kümesi parametresi ile somutlaştırılabilen bir de kullanabilirsiniz .
Sadece bir altın kural daha: Bir karaktere doğrudan bir bayt atmayın. Bu her zaman bir hatadır.
Kullanıcı sadece literaaly bir dönüştürmek istediğini varsayımına cevabım oturtmakta intiçin charörneğin,
Input:
int i = 5;
Output:
char c = '5'
Bu zaten yukarıda cevaplanmıştır, ancak tamsayı değeri varsa i > 10, o zaman kullanılması gerekir char array.
char[] c = String.valueOf(i).toCharArray();
int i = 7;
char number = Integer.toString(i).charAt(0);
System.out.println(number);
belki de en hızlısı değil:
//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);
Char'ın int veya long'a dönüştürülmesinin yanıtı basit dökümdür.
Örneğin: - Char '0'ı long'a dönüştürmek istiyorsanız.
Basit oyuncu kadrosunu takip edin
Char ch='0';
String convertedChar= Character.toString(ch); //Convert Char to String.
Long finalLongValue=Long.parseLong(convertedChar);
Bitti !!
public int read(char[] cbuf)sorunu çözecektir?