Преобразование streamа int в char в java

На это, вероятно, ответили иначе, но как вы можете получить значение символа значения int?

В частности, я читаю a из streamа tcp и чтения. Метод read () возвращает int.

Как мне получить символ?

Если вы пытаетесь преобразовать 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); 

Готово!!

  • Возвращать определенный тип внутри Haskell
  • Как получить тип ввода с помощью jquery?
  • Как разрешить «должен быть экземпляр строки, строка, заданная» до PHP 7?
  • Как запросить json-столбец для пустых объектов?
  • Почему я могу вводить функции псевдонима и использовать их без кастинга?
  • динамический тип объекта
  • Что делает ключевое слово `forall` в Haskell / GHC?
  • unsigned short в java
  • Как проверить, наследует ли class другой class, не создавая его?
  • Создайте словарь Swift, где ключ «Тип»?
  • Строка к двоичной в C #
  • Давайте будем гением компьютера.