Помогите с преобразованием Hex символов содержащихся в URL в настоящие Hex символы Скажем ввожу я в адресную панель браузера строку Code: netbios://10.207.8.28/My Media В результате браузер запускает мою программу работающую с протоколом netbios:// и передает в нее строку Code: netbios://10.207.8.28/My[B]%20[/B]Media Я у себя в программе использую следующий код Code: int arglen = strlen(backupname); for ( int i= 0; i < arglen; i++ ) { FixHex(backupname); } backupname содержи принимаемый прогой параметр Code: void FixHex( char *pname ) { bool havedhex = false; while ( *pname ) { if(havedhex) { *pname = *(pname + 2); } if ( *pname == '%' && *(pname + 1) == '2' && *(pname + 2) == '0') { *pname = '\x20'; havedhex = true; } pname++; } } Но этот код служит только для преобразования %20 в пробел подскажите как сделать автоматическое преобразование хекс значений со знаком % в их настоящий вид
я не много не понял чо тебе надо... но посмотри вот http://forum.sources.ru/index.php?showtopic=37821
вот нашел в своем проекте старом str - указатель на строку которую будем преобразовывать dst - указатель на буфер куда запишется результат size размер буфера por это походу порядок типа слева на право или справа налево 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++;} } } пример: Code: unsigned char str[]="22345200"; // типа 4 байта 22 34 52 00 unsigned long i; ato(srt,(unsigned char *)&i,4); ну а в твоем варианте в цикл надо добавить дополнительный i++; чтобы перепрыгивать % а патом byte[0] обратно преобразовать в ASCII прибавляя 0x57 или 0x30 (30 вроде для цифр) сейчас опять порылся и нашел свой старый проект на perl в котором есть функция обратного преобразования в URL вид Code: sub url { my $str=$_[0]; $str=~ s/(.)/"%".uc(sprintf("%2.2x",ord($1)))/eg; return $str; } на Си это будет что-то типа sprintf(&dst[k],"%%02X",str); k+=3;