Преобразование потока int в char в java

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

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

Как я могу получить от этого персонажа?

114 голосов | спросил Omar Kooheji 7 Maypm09 2009, 13:32:42

11 ответов


0

Если вы пытаетесь преобразовать поток в текст, вам необходимо знать, какую кодировку вы хотите использовать. Затем вы можете передать массив байтов в ---- +: = 0 =: + ---- и предоставьте String или используйте Charset с соответствующим InputStreamReader.

Просто приведение из Charset в int работает только если вы хотите ISO-8859-1, если вы читаете байты из потока напрямую.

РЕДАКТИРОВАТЬ: Если вы уже используете char, то приведение к возвращаемому значению Reader в read() - правильный путь (после проверяет, -1 это или нет) ... но обычно более эффективно и удобно вызывать char для чтения целого блока текста в время. Не забудьте проверить возвращаемое значение, чтобы узнать, сколько символов было прочитано.

ответил Jon Skeet 7 Maypm09 2009, 13:48:34
0

Может быть, вы просите:

Character.toChars(65) // returns ['A']

Дополнительная информация: Character.toChars(int codePoint)

  

Преобразует указанный символ (кодовая точка Unicode) в его представление UTF-16, хранящееся в массиве символов. Если указанная кодовая точка является значением BMP (базовая многоязычная плоскость или плоскость 0), результирующий массив символов будет иметь то же значение, что и codePoint. Если указанная кодовая точка является дополнительной кодовой точкой, результирующий массив символов имеет соответствующую суррогатную пару.

ответил ATorras 7 Maypm09 2009, 14:05:48
0

Это зависит от того, что вы подразумеваете под "конвертировать int в char".

Если вы просто хотите преобразовать значение в int, вы можете преобразовать его, используя нотацию типа 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);
....
}
ответил Lovubuntu 10 42011vEurope/Moscow11bEurope/MoscowThu, 10 Nov 2011 00:16:46 +0400 2011, 00:16:46
0

Если вы хотите просто преобразовать int 5 в char '5': (Только для целых чисел от 0 до 9)

int i = 5;
char c = (char) ('0' + i); // c is now '5';
ответил Ryan Anderson 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 19 Sep 2012 00:07:13 +0400 2012, 00:07:13
0

Это решение работает для Integer length size = 1.

Integer input = 9; Character.valueOf((char) input.toString().charAt(0))

Если размер> 1, нам нужно использовать цикл и повторяться.

ответил Spiker 4 MarpmWed, 04 Mar 2015 22:12:44 +03002015-03-04T22:12:44+03:0010 2015, 22:12:44
0

Большинство ответов здесь предлагают ярлыки, которые могут привести к большим проблемам, если вы не знаете, что делаете. Если вы хотите использовать ярлыки, вы должны точно знать, в какой кодировке содержатся ваши данные.

UTF-16

Всякий раз, когда java говорит о символах в своей документации, он говорит о 16-битных символах.

Вы можете использовать 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

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 с помощью параметра набора символов .

byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);

Вы также можете использовать InputStreamReader, который может быть создан с помощью параметра charset.

Еще одно золотое правило: никогда не бросайте байту персонажа напрямую. Это всегда ошибка.

ответил bvdb 23 J000000Thursday15 2015, 15:10:58
0

Исходя из моего ответа, предполагая, что пользователь просто хотел буквально преобразовать int в char, например

Input: 
int i = 5; 
Output:
char c = '5'

На это уже отвечали выше, однако если целочисленное значение i > 10, то нужно использовать char array

char[] c = String.valueOf(i).toCharArray();
ответил src3369 27 AM00000040000000031 2015, 04:05:00
0
    int i = 7;
    char number = Integer.toString(i).charAt(0);
    System.out.println(number);
ответил Shwarz Andrei 28 MonEurope/Moscow2015-12-28T21:09:12+03:00Europe/Moscow12bEurope/MoscowMon, 28 Dec 2015 21:09:12 +0300 2015, 21:09:12
0

Это полностью зависит от кодировки входящих данных.

ответил 8 Mayam09 2009, 00:11:22
0

может быть, не самый быстрый:

//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); 
ответил Guest89898989 17 Jpm1000000pmSat, 17 Jan 2015 14:24:29 +030015 2015, 14:24:29
0

Ответ для преобразования char в int или long - простое приведение.

Например: - если вы хотите конвертировать Char '0' в long.

Следуйте простому составу

Char ch='0';
String convertedChar= Character.toString(ch);  //Convert Char to String.
Long finalLongValue=Long.parseLong(convertedChar);

Готово !!

ответил Dheeraj Varne 5 FebruaryEurope/MoscowbTue, 05 Feb 2013 09:40:10 +0400000000amTue, 05 Feb 2013 09:40:10 +040013 2013, 09:40:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132