Моего приложения обычно recieves строки в следующем формате:
«Item $ 5,69»Как преобразовать строку с двойными высокими/широкими символами в обычную строку [VC++ 6]
Некоторых contants я всегда ожидал:
- ДЛИНА всегда 20 символов
- индекс начало текста всегда [5]
- и самое главное индекс DECIMAL по цене всегда [14]
для того, чтобы правильно определить эту строку я проверить все ожидаемые участники, перечисленные выше ....
Некоторые из моих клиентов уже начали посылать строку с Doube-High/сдвоенных значений (пара символов, которые представляют один читаемый символ), подобный следующему: «Item $ x80x90.x81x91x82x92»
Для тестирования я просто просматриваю строку по-символу, сравниваю char [i] и char [i + 1] и заменяю эти пары на свой единственный символ, когда совпадение найдено (работает нормально) следующим образом:
[Код]
for (int i=0; i < sData.length(); i++)
{
char ch = sData[i] & 0xFF;
char ch2 = sData[i+1] & 0xFF;
if (ch == '\x80' && ch2 == '\x90')
zData.replace("\x80\x90", "0");
else if (ch == '\x81' && ch2 == '\x91')
zData.replace("\x81\x91", "1");
else if (ch == '\x82' && ch2 == '\x92')
zData.replace("\x82\x92", "2");
...
...
...
}
[/ Code ]
Но результат-то вроде этого:
«Item $ 5,69»
Обратите внимание, как это уже не соответствует моим ожиданиям: длина теперь 17 (вместо 20) из-за 3-преобразования и десятичной теперь находится в индексе 13 (вместо 14) из-за преобразования «5» до десятичной точки.
В идеале я хотел бы преобразовать строку в обычный читаемый формат, сохраняя константы (длина, индекс текста, индекс десятичной) в одном и том же месте (так что остальная часть моего приложения будет повторно использоваться) ... или любое другое предложение (я в значительной степени застрял в этом) ... Существует ли STANDARD способ справиться с этими типами персонажей?
Любая помощь будет оценена, я застрял на это некоторое время теперь ...
Спасибо,
поиск "конвертировать широкий символ на char". если вы найдете решение, отправьте его. если никто не найдет решение в течение нескольких дней, я попытаюсь что-то написать. –
http://stackoverflow.com/questions/258050/how-to-convert-cstring-and-stdstring-stdwstring-to-each-other –
Не будет использовать WideCharToMultiByte по-прежнему изменять константы (например, общий размер строки, местоположение десятичной и т. д.)? – Shaitan00