На це, ймовірно, відповіли ще де, але як отримати значення символу int?
Зокрема, я читаю a з потоку tcp, і метод читачів .read () повертає int.
Як я можу отримати від цього чарку?
На це, ймовірно, відповіли ще де, але як отримати значення символу int?
Зокрема, я читаю a з потоку tcp, і метод читачів .read () повертає int.
Як я можу отримати від цього чарку?
Відповіді:
Якщо ви намагаєтеся перетворити потік у текст, вам потрібно знати, яке кодування ви хочете використовувати. Потім ви можете або передати масив байтів у Stringконструктор і надати a Charset, або використовувати InputStreamReaderвідповідний Charsetнатомість.
Просто кастинг з intна функціонує charлише в тому випадку, якщо ви бажаєте ISO-8859-1, якщо ви читаєте байти з потоку безпосередньо.
EDIT: Якщо ви які вже використовуєте Reader, а потім лиття повертається read()для charправильного шлях (після перевірки , чи є це -1 чи ні) ... але це зазвичай більш ефективних і зручні для виклику read(char[], int, int)читати весь блок текст за один раз. Не забудьте перевірити значення повернення, щоб побачити, скільки символів прочитано.
InputStreamReaderв BufferedReader, як згадувалося в javadoc docs.oracle.com/javase/8/docs/api/java/io/…
Можливо, ви просите:
Character.toChars(65) // returns ['A']
Більше інформації: Character.toChars(int codePoint)
Перетворює вказаний символ (точку коду Unicode) у його представлення UTF-16, що зберігається у масиві char. Якщо вказаною кодовою точкою є значення BMP (Basic Multilingual Plane або Plane 0), отриманий масив char має те саме значення, що і codePoint. Якщо вказана кодова точка є додатковою кодовою точкою, отриманий масив знаків має відповідну сурогатну пару.
toCharsяк правило, недоцільно. Якщо він читає з Читача, то це добре.
Це залежить від того, що ви маєте на увазі під "перетворити інт на char".
Якщо ви просто хочете передати значення в int, ви можете передати його, використовуючи позначення на Java typecast:
int i = 97; // 97 is 'a' in ASCII
char c = (char) i; // c is now 'a'
Якщо ви маєте на увазі перетворення цілого числа 1 в символ "1", ви можете зробити це так:
if (i >= 0 && i <= 9) {
char c = Character.forDigit(i, 10);
....
}
Якщо ви хочете просто перетворити int 5 в char '5': (Тільки для цілих чисел 0 - 9)
int i = 5;
char c = (char) ('0' + i); // c is now '5';
Простий кастинг:
int a = 99;
char c = (char) a;
Чи є якась причина, що це не працює для вас?
Більшість відповідей тут пропонують ярлики, які можуть доставити вам великі проблеми, якщо ви не знаєте, чим займаєтесь. Якщо ви хочете скористатися ярликами, ви повинні точно знати, в чому кодується ваші дані.
Щоразу, коли java розмовляє про персонажів у своїй документації, вона говорить про 16-бітових символів.
Ви можете використовувати a DataInputStream, який має зручні методи. Для підвищення ефективності, загорнути його в BufferedReader.
// e.g. for sockets
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
char character = readChar(); // no need to cast
Вся справа в тому, що кожен readChar()насправді виконує 2 read-х і поєднує їх в один 16-бітний символ.
US-ASCII резервує 8 біт для кодування 1 символу. Таблиця ASCII містить лише 128 можливих символів, тому 1 біт завжди не використовується.
Ви можете просто виконати акторський склад у цьому випадку.
int input = stream.read();
if (input < 0) throw new EOFException();
char character = (char) input;
UTF-8, Latin-1, ANSI та багато інших кодувань використовують усі 8-бітні. Перші 7-бітні слідують за таблицею ASCII і ідентичні тим, що кодують US-ASCII. Однак 8-й біт пропонує символи, які є різними у всіх цих кодуваннях. Отже, тут справи стають цікавими.
Якщо ви ковбой, і ви думаєте, що 8-й біт не має значення (тобто вам не байдужі персонажі на кшталт "à, é, ç, è, ô ...), тоді ви можете піти з простого складу.
Однак, якщо ви хочете зробити це професійно, вам дійсно ЗАВЖДИ вказувати схему, коли ви імпортуєте / експортуєте текст (наприклад, розетки, файли ...).
Давайте розберемося серйозно. Всі перераховані вище варіанти - дешеві хитрощі. Якщо ви хочете написати гнучке програмне забезпечення, вам потрібно підтримати налаштовану діаграму для імпорту / експорту ваших даних. Ось загальне рішення:
Прочитайте свої дані за допомогою byte[]буфера та перетворіть їх у String параметр charset .
byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);
Ви також можете використовувати InputStreamReader параметром charset, який може бути екземпляром.
Ще одне золоте правило: ніколи не кидайте байт персонажу. Це завжди помилка.
На основі моєї відповіді на припущенні, що користувач просто хотів буквально перетворити intна char, наприклад
Input:
int i = 5;
Output:
char c = '5'
На це вже було сказано вище, однак якщо ціле значення i > 10, то потрібно використовувати char array.
char[] c = String.valueOf(i).toCharArray();
int i = 7;
char number = Integer.toString(i).charAt(0);
System.out.println(number);
можливо, не найшвидший:
//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 в int або long - це просте кастинг.
Наприклад: - якщо ви хочете перетворити Char '0' у довгий.
Дотримуйтесь простого акторського складу
Char ch='0';
String convertedChar= Character.toString(ch); //Convert Char to String.
Long finalLongValue=Long.parseLong(convertedChar);
Готово !!
public int read(char[] cbuf)вирішить проблему?