2016-11-11 12 views
0

я нашел объяснение для декодирования HEX-представления в десятичной системе, но только с помощью Qt: How to get decimal value of a unicode character in c++C++: Преобразование шестнадцатеричного представления utf16 полукокса в десятичной системе (например, междунар питона (hex_data, 16))

Как я не с помощью Qt и cout << (int)c делает не работы (Edit: это на самом деле работает, если вы используете его правильно! ..):

Как сделать следующее:

я получил шестнадцатеричное представление двух символов, которые были переданы через некоторое гнездо (Просто понял, как получить шестигранный Repr наконец ..!) И оба вместе взятого выхода следующего utf16-представление:

char c = u"\0b7f" 

Это должно быть преобразовано в его utf16 десятичное значение ! (см его в UTF-таблице http://www.fileformat.info/info/unicode/char/0b7f/index.htm)

Это должно быть Absolut элементарный материалом, но в качестве назначенного разработчика Python вынужденного использовать C++ для проекта я вишу этот вопрос в течение нескольких часов ....

+2

Почти на каждой системе символ не будет содержать полный символ utf16. UTF16 - 2/4 байта, тогда как символ - один. Кроме того, что вы подразумеваете под конверсией? Все эти цифры представлены на компьютере одинаково. – Nonanon

+1

'char' всего 1 байт, вы можете использовать' wchar_t', который является 2 байтами в Windows и 4 в Posix, или 'char16_t' для независимости от платформы, если вы используете C++ 11 и выше. Затем вы можете просто перевести переменную в 'int', чтобы получить числовое значение. –

+0

Ты совершенно прав, только что отредактировал мой вопрос .... два сочетания сочетаний дают мне это utf16-представление .... Я просто хочу получить десятичное значение «2943» из «\ 0b7f» (см. Таблицу символов). –

ответ

1

использования более широкий тип символа (char - всего 8 бит, вам нужно как минимум 16), а также правильный формат для литералов UTC. Это работает (live demo):

#include <iostream> 

int main() 
{ 
    char16_t c = u'\u0b7f'; 

    std::cout << (int)c << std::endl; //output is 2943 as expected 

    return 0; 
} 
+0

Работает! Забыл «u» после обратной косой черты! У меня был u "\ 0b7f" вместо u "\ u0b7f" .... Большое вам спасибо, я должен быстрее спросить о stackoverflow, поскольку я потерял ок. 6 часов на этом дерьме –