В моем проекте мне нужно преобразовать строку, содержащую верхний индекс — m², в строку m2.
Мой проект принимает единицу измерения, которая включает квадратный метр (м²) или кубический метр (м³). И мне нужно преобразовать верхние индексы в обычное целое число или строку для дальнейшей обработки входных данных.
Однако в данный момент я не могу найти в C ++ ничего, что могло бы сделать это для меня.
Приложение находится на C ++, и мы используем CComBSTR для хранения строки.
Идеальным выходом будет м2 на м² и м3 на м³ и т. Д.
Какие-либо предложения
CComBSTR
это просто обертка для BSTR
, Это, в свою очередь, является WCHAR*
, который соответствует типу C ++ wchar_t*
, Поскольку вы работаете в Windows, вы должны знать, что WCHAR
это UTF-16.
Это означает, что вам нужно искать wchar_t(0x00B2)
а также wchar_t(0x00B3)
, std::find
может сделать это, просто передать его начало и конец вашего BSTR
,
Я подозреваю, что ключевым моментом является кодировка символов. Верхний индекс 2 не является символом ascii. Они посвятили символы Юникода (см. http://en.wikipedia.org/wiki/Superscripts_and_Subscripts, со значениями в диапазоне 0x207x, кроме 2 и 3), и они обычно кодируются 16 битами. Если у вас есть std :: string, то символ, тогда они, вероятно, закодированы в UTF-8, что означает более одного символа на символ (см. http://en.wikipedia.org/wiki/UTF-8).
Есть много чего читать, но в конце это довольно легко. Вам просто нужно искать подстроку (че UTF-8 надстрочного индекса 2 и 3)