QChar хранит отрицательный код Latin1 для знака умножения '×'
Я хочу получить код Latin1 для знака умножения ×
, но когда я проверяю значение внутри QChar
она имеет -41'×'
,
Мой код:
QString data = "×";
QChar m = data.at(0);
unsigned short ascii = (unsigned short)m.toLatin1();
Когда я отлаживаю, во второй строке я вижу QChar
значение -41'×'
,
Я изменил код:
unsigned int ascii = c.unicode();
Но я скорее получаю значение 215 и ожидаю 158.
2 ответа
Знак умножения ×
это не знак ascii, как вы можете видеть при проверке man ascii
если вы в системе Unix.
Каково его значение, зависит от кодировки, см. Здесь для его представления UTF. Например, в UTF-8 он имеет значение 0xC397
которые два байта. Как упомянуто на странице Unicode, на которую я ссылаюсь 215, это десятичное значение для представления этого символа в кодировке UTF-16, что c.unicode()
возвращается. Я не знаю, почему вы ожидаете 158.
Хотя есть знак умножения ascii, который *
,
Если вы проверите таблицу кодов Latin1, очевидно, что ×
действительно кодируется как 215 или -41. Qt дает вам правильный результат.
Ваши ошибки:
Предполагая, что Latin1 эквивалентно ASCII. Latin1 просто содержит ASCII, но является надмножеством: он определяет в 2 раза больше кодов, чем ASCII.
При условии, что
×
представлен в ASCII. Это не.
Понятия не имею, откуда у вас идея, что кодируется Latin1 ×
должно быть 158. Конечно, это не из таблицы кода Latin1! Кстати, кодировки Latin1 и UTF-8 ×
идентичны