HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Преобразование hex символов в URL
  #1  
Старый 11.12.2009, 16:08
fire64
Участник форума
Регистрация: 01.04.2008
Сообщений: 200
С нами: 9531722

Репутация: 39
По умолчанию Преобразование hex символов в URL

Помогите с преобразованием Hex символов содержащихся в URL в настоящие Hex символы

Скажем ввожу я в адресную панель браузера строку


Код:
netbios://10.207.8.28/My Media
В результате браузер запускает мою программу работающую с протоколом netbios://

и передает в нее строку

Код:
netbios://10.207.8.28/My%20Media

Я у себя в программе использую следующий код

Код:
	int arglen = strlen(backupname);

	for ( int i= 0; i < arglen; i++ )
	{
		FixHex(backupname);
	}
backupname содержи принимаемый прогой параметр

Код:
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 в пробел

подскажите как сделать автоматическое преобразование хекс значений со знаком % в их настоящий вид
 
Ответить с цитированием

  #2  
Старый 11.12.2009, 17:22
DeaD_MoroZ
Banned
Регистрация: 03.11.2009
Сообщений: 112
С нами: 8694756

Репутация: 17
По умолчанию

я не много не понял чо тебе надо... но посмотри вот http://forum.sources.ru/index.php?showtopic=37821
 
Ответить с цитированием

  #3  
Старый 11.12.2009, 19:28
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
С нами: 9023100

Репутация: 395


По умолчанию

вот нашел в своем проекте старом
str - указатель на строку которую будем преобразовывать
dst - указатель на буфер куда запишется результат
size размер буфера
por это походу порядок типа слева на право или справа налево


Код:
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++;}
                }
        }
пример:
Код:
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 вид

Код:
sub url
	{
	my $str=$_[0];
	$str=~ s/(.)/"%".uc(sprintf("%2.2x",ord($1)))/eg;
	return $str;
	}
на Си это будет что-то типа
sprintf(&dst[k],"%%02X",str[i]); k+=3;

Последний раз редактировалось Gar|k; 11.12.2009 в 19:42..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кому нужно перебрать до 9 символов - сюда! hesher Криптография, расшифровка хешей 177 27.09.2005 21:27



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.