0

I am using wxWidgets with c++. I have a wxTextCtrl in which the user inputs a set of bytes in hex format separated by space. I want to get them in unsigned char array. How can I convert from a string like "AB D3 4F A A1 0B" to get the resulting array: [171, 211, 79, 10, 161, 11]?

Xaver
  • 991
  • 2
  • 19
  • 37

3 Answers3

2

I would use wxStringTokenizer to break up the string into individual hexes, then sscanf to convert them into numeric values.

Something like this:

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 );
}
ravenspoint
  • 19,093
  • 6
  • 57
  • 103
1

Instead of using a sscanf to convert Hex in integer you can also use the ToULong operation of a wxString in base 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 );
}
leaumonte
  • 49
  • 2
0

You can also use boost::tokenizer to split string into tokens and this to convert string values to hex values.

Community
  • 1
  • 1
fat
  • 6,435
  • 5
  • 44
  • 70