Всем привет. Имеется следующая ситуация: даны 2 HEX строки вида 1) 315c4eeaa8b5f8aaf9174145bf43e1784b8fa00dc71d885a804e5ee9fa40b16349c146fb778cdf2d3aff021dfff5b403b5 2) 34c02ecbbfbafa3ed18510abd11fa724fcda2018a1a8342cf064bbde548b12b07df44ba7191d9606ef4081ffde5ad46a5069d9 Мне необходимо их проксорить, т.е. S1 XOR S2. Но неожиданно для себя столкнулся с проблемой. А именно, каким образом я могу вогнать эти строки в массив символов char* чтобы потом уже делать какие либо операции?? Я только начинаю изучать c++ - так что не кричите сильно!) С.Прата уже большую часть прочитал, но ни чего подобного там и близко нет(
Программисты Windows, давно придумали свои велосипеды: http://msdn.microsoft.com/en-us/library/bb773451.aspx А я делал что-то типа Code: void ato(unsigned char *str,unsigned char *dst,size_t size,bool por=false) { #define BYTE(l,h) (((l)<<4)|((h)&0xFF)) size_t i=0,j=0; unsigned char byte[1]; // преобразуем в строку в число for(i=0;i<size*2;i++) { if(str[i]>0x40){str[i]-=0x57;}else{str[i]-=0x30;} } // заполняем числами if(por==false){j=size-1;}else{j=0;} for(i=0;i<size*2;i+=2) { byte[0]=BYTE(str[i],str[i+1]); dst[j]=byte[0]; if(por==false){j--;}else{j++;} } } P.S: ^ какой не красивый код раньше писал...
Велосипедов больше чем кажется http://msdn.microsoft.com/en-us/library/windows/desktop/aa380285%28v=vs.85%29.aspx Между тем реализаций в интернете куча, непонятно зачем такое на форуме спрашивать. Например: http://www.opensource.apple.com/source/OpenSSL/OpenSSL-30/openssl/fips/rand/fips_rngvs.c http://code.google.com/p/bintext/source/browse/trunk/hex2bin.c?r=2 и т.п.
Больной мозг родил это Code: #define BYTE(l,h) (((l)<<4)|((h)&0xFF)) int hex2bin(char *hex, char *bin) { char *p=hex; int size=0; while(*p) *(p++) -= (*p > 0x40) ? 0x57 : 0x30; do bin[size++] = BYTE( *hex++, *++hex ); while(hex < p); return size; }
0_o всем спасибо, пошел разбираться)) to Kaimi - ну я ж просил, не кричите, только начинаю изучать с++))