Re[3]: AT-комманда +CPBR и русские буковки
От: kiborg Россия  
Дата: 30.08.11 03:41
Оценка:
Здравствуйте, 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 это мой класс строки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.