Преобразование streamа int в char в java
На это, вероятно, ответили иначе, но как вы можете получить значение символа значения int?
В частности, я читаю a из streamа tcp и чтения. Метод read () возвращает int.
Как мне получить символ?
- Как определить тип MIME загруженного файла в ASP.NET?
- Тип аргумента для сигнала и слота Qt, имеет ли значение задание отступников?
- .NET Integer vs Int16?
- Generics в C #, используя тип переменной как параметр
- Где в памяти мои переменные, хранящиеся в C?
- .NET: Как вы получаете Тип нулевого объекта?
- Как напечатать тип или class переменной в Swift?
- Преобразование hex в текстовое представление в десятичное число
- Как определить применение Lisp в Haskell?
- Определить тип файла изображения
- Типы в MySQL: BigInt (20) против Int (20)
- Вопрос о поведении C для неподписанного целого нижнего streamа
- Что такое тип данных uintptr_t
Если вы пытаетесь преобразовать stream в текст, вам нужно знать, какую кодировку вы хотите использовать. Затем вы можете передать массив байтов в конструктор String
и предоставить Charset
или вместо этого использовать InputStreamReader
с соответствующей Charset
.
Простое литье из int
в char
работает только если вы хотите ISO-8859-1, если вы читаете байты из streamа напрямую.
EDIT: если вы уже используете Reader
, то приведение возвращаемого значения read()
в char
– это правильный путь (после проверки, равен ли он -1 или нет) … но обычно более эффективно и удобно вызывать read(char[], int, int)
для чтения целого блока текста за раз. Однако не забудьте проверить возвращаемое значение, чтобы узнать, сколько символов было прочитано.
Возможно, вы просите:
Character.toChars(65) // returns ['A']
Дополнительная информация: Character.toChars(int codePoint)
Преобразует указанный символ (кодовая точка Юникода) в его представление UTF-16, хранящееся в массиве символов. Если указанная кодовая точка представляет собой значение BMP (базовая многоязычная плоскость или плоскость 0), результирующий массив символов имеет то же значение, что и codePoint. Если указанная кодовая точка является дополнительной кодовой точкой, результирующий массив символов имеет соответствующую суррогатную пару.
Это зависит от того, что вы подразумеваете под «преобразовать int в char».
Если вы просто хотите присвоить значение в int, вы можете использовать его с помощью машинной нотации Java:
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;
Есть ли причина, по которой это не работает?
Это решение работает для Integer length size = 1.
Integer input = 9; Character.valueOf((char) input.toString().charAt(0))
если размер> 1, мы должны использовать для цикла и итерации.
Большинство ответов здесь предлагают ярлыки, которые могут привести к большим проблемам, если вы не знаете, что делаете. Если вы хотите использовать ярлыки, вы должны точно знать, что кодирует ваши данные.
UTF-16
Всякий раз, когда java говорит о символах в своей документации, он говорит о 16-битных символах.
Вы можете использовать DataInputStream
, который имеет удобные методы. Для эффективности оберните его в BufferedReader
.
// eg for sockets DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream())); char character = readChar(); // no need to cast
Дело в том, что каждый readChar()
фактически выполняет 2 read
и объединяет их с одним 16-разрядным символом.
US-ASCII
US-ASCII резервирует 8 бит для кодирования 1 символа. Таблица ASCII описывает только 128 возможных символов, поэтому 1 бит всегда не используется.
В этом случае вы можете просто выполнить бросок.
int input = stream.read(); if (input < 0) throw new EOFException(); char character = (char) input;
Расширенный ASCII
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.
Еще одно золотое правило: никогда не накладывать байт на персонажа. Это всегда ошибка.
Основываясь на моем ответе на предположение, что пользователь просто хотел, чтобы literaaly конвертировал int
в char
, например
Input: int i = 5; Output: char c = '5'
данные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);
Готово!!