2011-04-19 2 views
0

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

ответ

2

Я бы использовал 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); 
} 
0

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

1

Вместо того, чтобы использовать sscanf для преобразования Hex в целое число можно также использовать ToULong operation of a 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); 
} 
Смежные вопросы