Вероятно, на этот вопрос ответили где-то еще, но как получить символьное значение значения int?
В частности, я читаю a из потока tcp, а метод reader .read () возвращает int.
Как мне получить из этого чар?
Вероятно, на этот вопрос ответили где-то еще, но как получить символьное значение значения int?
В частности, я читаю a из потока tcp, а метод reader .read () возвращает int.
Как мне получить из этого чар?
Ответы:
Если вы пытаетесь преобразовать поток в текст, вам нужно знать, какую кодировку вы хотите использовать. Затем вы можете либо передать массив байтов в Stringконструктор и предоставить Charset, либо использовать вместо него InputStreamReaderсоответствующий Charset.
Простое преобразование из intв charработает только в том случае, если вам нужен ISO-8859-1, если вы читаете байты напрямую из потока.
EDIT: Если вы которые уже используете Reader, а затем литье возвращаемого значения read()для charправильного путь (после проверки , является ли это -1 или нет) ... но это обычно более эффективных и удобные для вызова read(char[], int, int)читать весь блок текст за раз. Не забудьте проверить возвращаемое значение, чтобы узнать, сколько символов было прочитано.
InputStreamReaderв a BufferedReader, как указано в javadoc docs.oracle.com/javase/8/docs/api/java/io/…
Может быть, вы просите:
Character.toChars(65) // returns ['A']
Больше информации: Character.toChars(int codePoint)
Преобразует указанный символ (кодовая точка Unicode) в его представление UTF-16, хранящееся в массиве символов. Если указанная кодовая точка является значением BMP (Basic Multilingual Plane или Plane 0), результирующий массив символов имеет то же значение, что и codePoint. Если указанная кодовая точка является дополнительной кодовой точкой, результирующий массив символов имеет соответствующую суррогатную пару.
toCharsобычно неуместно. Если он читает из Reader, тогда все в порядке.
Это зависит от того, что вы подразумеваете под «преобразованием 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;
Есть ли причина, по которой это не работает для вас?
Большинство ответов здесь предлагают ярлыки, которые могут вызвать у вас большие проблемы, если вы не знаете, что делаете. Если вы хотите использовать ярлыки, вы должны точно знать, в какой кодировке находятся ваши данные.
Всякий раз, когда 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.
Еще одно золотое правило: никогда не приводите байты к символу напрямую. Это всегда ошибка.
На основании моего ответа на предположении , что пользователь просто хотел 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 - простое приведение.
Например: - если вы хотите преобразовать Char '0' в long.
Следуйте простому составу
Char ch='0';
String convertedChar= Character.toString(ch); //Convert Char to String.
Long finalLongValue=Long.parseLong(convertedChar);
Готово!!
public int read(char[] cbuf)решит проблему?