wxWidgets wxString - PullRequest
       6

wxWidgets wxString

0 голосов
/ 19 апреля 2011

Я использую wxWidgets с C ++. У меня есть wxTextCtrl, в котором пользователь вводит набор байтов в шестнадцатеричном формате, разделенных пробелом. Я хочу получить их в массиве без знака. Как преобразовать строку типа «AB D3 4F A A1 0B», чтобы получить результирующий массив: [171, 211, 79, 10, 161, 11]?

Ответы [ 3 ]

2 голосов
/ 19 апреля 2011

Я бы использовал wxStringTokenizer, чтобы разбить строку на отдельные гексы, а затем sscanf, чтобы преобразовать их в числовые значения.

Примерно так:

std::vector<unsigned char> vec;
wxStringTokenizer tkz(thetextCtrl->GetValue(), wxT(" "));
while ( tkz.HasMoreTokens() )
{
    wxString token = tkz.GetNextToken();
    unsigned char v;
    sscanf(token.c_str(),"%x",&v)
    vec.push_back( v );
}
1 голос
/ 23 мая 2016

Вместо использования sscanf для преобразования Hex в целое число вы также можете использовать операцию ToULong для wxString в базе 16.

wxString token = tkz.GetNextToken();
unsigned long ulVal;

if (token.ToULong(&ulVal, 16) == true)
{
  vec.push_back( (unsigned char)v );
}
else
{
  // A default value for example ...
  vec.push_back( (unsigned char)0 );
}
0 голосов
/ 21 ноября 2011

Вы также можете использовать boost :: tokenizer для разбиения строки на токены и this для преобразования строковых значений в шестнадцатеричные значения.

...