Здравствуйте, AndreySol, Вы писали:
AS>Здравствуйте, kiborg:
AS>У моего китайца список кодировок: "IRA", "GSM", "HEX", "PCCP437", "8859-1", "UCS2", "UCS2_0X81". Понятно сразу что "PCCP437" не подойдет т.к. в 437 кодовой странице нет русских символов. Насчет остальных ничего не понял, хотя пытался читать про них — все на англицком, а я с ним не очень.
K>>И когда ты это присваиваешь строке CString то как она там это запомнит... -)
AS>Вот в этом наверное и проблема. Может что-то другое нуно вместо CString ?
Смело выбирай "UCS2". Это упрощенный двухбайтовый Unicode (UTF-16). Сам найдешь про Unicode.
В чем разница между UTF и UCS
Выбрав эту кодировку в ответ должна приходить примерно такая строка:
+CPBR: 1,"067409180",129,"0047007000720073002D041E043A04300437002C"
Соответственно каждые 2 байта (4 символа HEX строки) преобразовать в отдельный символ UCS2
0047 0070 0072 0073 002D
У меня вот такая функция
GString GString::HexCharToString(/*[in]*/GString &str)
{
GString s_temp;
unsigned int data;
wchar_t buf;
for (ULONG i = 0; i < str.Length(); i+=4)
{
//buf = *str[i];
data = HexToInt(*str[i]);
data = (wchar_t)((data << 4) | HexToInt(*str[i+1]));
buf = HexToInt(*str[i+2]);
buf = (wchar_t)((buf << 4) | HexToInt(*str[i+3]));
s_temp += (wchar_t)((data << 8) | buf);
}
return s_temp;
}
Только замени GString на CString, потому как это GString это мой класс строки.