Как преобразовать QChar в код символа в таблице cp866?

Как получить int код qchar в этой таблице http://www.ascii-codes.com/cp866.html?

Вот мой код:

int getCp866Code(QChar c) {
    if (!c.isSurrogate()) {
        QString temp = c;
        QTextCodec* cp866 = QTextCodec::codecForName("IBM 866");
        QByteArray byteArray = cp866->fromUnicode(temp);
        return (int) byteArray[0];
    }
    return -1;
}

getCp866Code ('ж') // возвращает -90, а не 166

1 ответ

Вопрос плохо поставлен. QChar - это кодовая единица UTF-16 (что также означает, что он может быть частью суррогатной пары). Ваш лучший выстрел будет

  1. Убедитесь, что это не часть суррогатной пары (QChar::isSurrogate)
  2. Создайте QString, состоящую только из этого символа, затем используйте QTextCodec для кодирования строки в CP866. Затем извлеките первый байт.

Обратите внимание, что неизвестно, что вы получите, если ваша кодовая точка не кодируется в CP866.

Другие вопросы по тегам