Как я могу преобразовать тип данных char в его представление utf-8 int в обработке?
Итак, если бы у меня был массив ['a', 'b', 'c'], я бы хотел получить другой массив [61, 62, 63].
Как я могу преобразовать тип данных char в его представление utf-8 int в обработке?
Итак, если бы у меня был массив ['a', 'b', 'c'], я бы хотел получить другой массив [61, 62, 63].
После моего ответа я придумал гораздо более простой и прямой способ преобразования в нужные вам типы чисел. То, что вы хотите для «а», — это 61 вместо 97 и так далее. Это не очень сложно, учитывая, что 61 — это шестнадцатеричное представление десятичного числа 97. Поэтому все, что вам нужно сделать, это передать свой char в определенный метод, например:
Integer.toHexString((int)'a');
Если у вас есть массив таких символов:
char[] c = {'a', 'b', 'c', 'd'};
Затем вы можете использовать вышеизложенное таким образом:
Integer.toHexString((int)c[0]);
и так далее и тому подобное.
ИЗМЕНИТЬ
В соответствии с примером vk в комментариях ниже, вы можете сделать следующее в обработке:
char c = 'a';
Вышеприведенное даст вам шестнадцатеричное представление символа в виде строки.
// to save the hex representation as an int you need to parse it since hex() returns a String
int hexNum = PApplet.parseInt(hex(c));
// OR
int hexNum = int(c);
В интересах ОП и комментатора ниже. Вы получите 97 для «а», даже если вы использовали мое предыдущее предложение в ответе, потому что 97 — это десятичное представление шестнадцатеричного 61. Видя, что UTF-8 соответствует первым 127 значениям записей ASCII для значения, я не понимаю, почему в любом случае можно было бы ожидать чего-то другого. Что касается исключения UnsupportedEncodingException, простым исправлением будет помещение операторов в блок try/catch. Однако в этом нет необходимости, поскольку приведенное выше прямо отвечает на вопрос гораздо проще.
что вы имеете в виду "utf-8 int"? UTF8 — это многобайтовая схема кодирования букв (технически глифов), представленных в виде чисел Unicode. В вашем примере вы используете тривиальные буквы из набора ASCII, но этот набор имеет очень мало общего с реальным вопросом unicode/utf8.
Для простых букв вы можете буквально просто ввести:
print((int)'a') -> 97
print((int)'A') -> 65
Но вы не можете сделать это с символами за пределами 16-битного диапазона символов. print((int)'二')
работает (дает 20108 или 4E8C в шестнадцатеричном формате), но print((int)'????')
выдаст ошибку компиляции, потому что код символа для ???? не помещается в 16 бит (предполагается, что это 131362 или 20122 в шестнадцатеричном формате, который кодируется как трехбайтный последовательность UTF-8 239+191+189)
Таким образом, для символов Unicode с кодом выше 0xFFFF
вы не можете использовать приведение типов int, и вам действительно придется хорошенько подумать о том, что вы декодируете. Если вам нужны истинные значения точек Unicode, вам придется буквально декодировать печать байтов, но Processing IDE на самом деле не позволяет вам это делать; он скажет вам, что "????".length() равно 1, тогда как в реальной Java это на самом деле 3. В текущей обработке нет способа фактически получить значение Unicode для любого символа с кодом выше, чем 0xFFFF
.
обновить
Кто-то упомянул, что вам действительно нужны шестнадцатеричные строки. Если это так, используйте встроенную функцию hex
.
println(hex((int)'a')) -> 00000061
и если вам нужны только 2, 4 или 6 символов, просто используйте подстроку:
println(hex((int)'a').substring(4)) -> 0061