Как преобразовать строку, содержащую верхний индекс (m²), в обычную строку, например, m2, в переполнении стека

В моем проекте мне нужно преобразовать строку, содержащую верхний индекс — m², в строку m2.

Мой проект принимает единицу измерения, которая включает квадратный метр (м²) или кубический метр (м³). И мне нужно преобразовать верхние индексы в обычное целое число или строку для дальнейшей обработки входных данных.
Однако в данный момент я не могу найти в C ++ ничего, что могло бы сделать это для меня.

Приложение находится на C ++, и мы используем CComBSTR для хранения строки.

Идеальным выходом будет м2 на м² и м3 на м³ и т. Д.

Какие-либо предложения

3

Решение

CComBSTR это просто обертка для BSTR, Это, в свою очередь, является WCHAR*, который соответствует типу C ++ wchar_t*, Поскольку вы работаете в Windows, вы должны знать, что WCHAR это UTF-16.

Это означает, что вам нужно искать wchar_t(0x00B2) а также wchar_t(0x00B3), std::find может сделать это, просто передать его начало и конец вашего BSTR,

2

Другие решения

Я подозреваю, что ключевым моментом является кодировка символов. Верхний индекс 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)

0

По вопросам рекламы [email protected]