ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

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

Репутация: 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
Провел на форуме:
98006

Репутация: 17
Отправить сообщение для DeaD_MoroZ с помощью ICQ
По умолчанию

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

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

Репутация: 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..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Xss без Xss k00p3r Чужие Статьи 5 08.09.2008 15:53
Кому нужно перебрать до 9 символов - сюда! hesher Расшифровка хешей 177 27.09.2005 21:27



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


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




ANTICHAT.XYZ