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



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



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



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

650   12  

12 ответов:

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

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

изменить: если вы are уже Reader, затем приведение возвращаемого значения read() до char это правильный путь (после проверки, является ли это -1 или нет)... но это, как правило, более эффективными и удобными для вызова read(char[], int, int) читать целый блок текста за один раз. Не забудьте проверить возвращаемое значение, чтобы увидеть, сколько символов было прочитано.

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

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

Подробнее: Character.toChars(int codePoint)

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

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

Если вы просто хотите привести значение в int, вы можете привести его с помощью нотации typecast 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;

есть ли причина, по которой это не работает для вас?

Это решение работает для размера целочисленной длины =1.

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

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

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

UTF-16

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

вы можете использовать DataInputStream, который имеет удобные методы. Для эффективности, оберните его в a BufferedReader.

// e.g. for sockets
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
char character = readChar(); // no need to cast

дело в том, что каждый readChar() на самом деле будет выполнять 2 read ' s и объединить их в один 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, Латинский-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'

на это уже был дан ответ выше, однако если целое значение 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 простой формы.

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

следуйте простой литой

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

готово!!

Comments

    Ничего не найдено.