Написал тут себе пару функций для перевода массива байт в hex строку и наоборот. Особого отношения к wxWidgets не имеют, да и сами фунции конечно тривиальные, но может кому съэкономит час работы (а может и два!) работы, а это в наше нелегкое кризисное время, не мало 🙂
[sourcecode language=”cpp”]
#include
#include
using namespace std;
std::vector hex2bin(const TCHAR * hexstring)
{
std::vector v;
int ind=-1;
bool first=true;
TCHAR c, b;
while(hexstring[++ind])
{
c=hexstring[ind];
if( (c>47) && (c<58)) c-=48;
else if ( (c>64) && (c<71)) c-=65-10;
else if ( (c>96) && (c<103)) c-=97-10;
else continue;
if (first) b=c<<4; else v.push_back(static_cast(b+c));
first=!first;
}
return v;
}
//bufferlen should be at least len*2+1 or len*3 if separator is set
int bin2hex(unsigned char *data, int len, TCHAR *buffer, int bufferlen, TCHAR separator)
{
assert( ((separator==0) && (bufferlen>len*2)) || (separator && (bufferlen>len*3-1)));
if (((separator==0) && (bufferlen0) buffer[0]=0;
return 0;
}
const TCHAR hex[]={_T(‘0’), _T(‘1’), _T(‘2’), _T(‘3’), _T(‘4’), _T(‘5’), _T(‘6’),
_T(‘7’), _T(‘8’), _T(‘9’), _T(‘a’), _T(‘b’), _T(‘c’), _T(‘d’), _T(‘e’), _T(‘f’)};
int ind=-1;
while(len>0)
{
buffer[++ind] = hex[*data >> 4];
buffer[++ind] = hex[*data & 0x0F];
if (separator!=0) buffer[++ind] = separator;
++data; –len;
}
if (separator!=0) –ind;
buffer[++ind]=0;
return ind; // count TCHAR without end \0
}[/sourcecode]