hex2bin and bin2hex c++ functions
December 11th, 2008 Begemot Posted in Не wxWidgets
Написал тут себе пару функций для перевода массива байт в hex строку и наоборот. Особого отношения к wxWidgets не имеют, да и сами фунции конечно тривиальные, но может кому съэкономит час работы (а может и два!) работы, а это в наше нелегкое кризисное время, не мало 🙂
#include <assert.h> #include <vector> using namespace std; std::vector<unsigned char> hex2bin(const TCHAR * hexstring) { std::vector<unsigned char> v; int ind=-1; bool first=true; TCHAR c, b; while(hexstring[++ind]) { c=hexstring[ind]; if( (c>47) &amp;&amp; (c<58)) c-=48; else if ( (c>64) &amp;&amp; (c<71)) c-=65-10; else if ( (c>96) &amp;&amp; (c<103)) c-=97-10; else continue; if (first) b=c<<4; else v.push_back(static_cast<unsigned char>(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) &amp;&amp; (bufferlen>len*2)) || (separator &amp;&amp; (bufferlen>len*3-1))); if (((separator==0) &amp;&amp; (bufferlen<len*2+1)) || (separator &amp;&amp; (bufferlen<len*3))) { if (bufferlen>0) 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 &amp; 0x0F]; if (separator!=0) buffer[++ind] = separator; ++data; --len; } if (separator!=0) --ind; buffer[++ind]=0; return ind; // count TCHAR without end \0 }
Если пост полезен для вас вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.
Related:
December 14th, 2008 at 11:06 pm
& в коде лишние поубирай 🙂 плагин к вордпрессу немного подглючивает с этим
December 14th, 2008 at 11:24 pm
попробуй их убрать, если он после каждого сохранениях их заново сохраняет…. я когда постил перевод книги два часа убил на это:( нафик, кому надо сами на минуту исправят в IDE