parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

by 26.03.2008 00:48

Тема старая, но все же...

Функция pack("H*", ...) как таковая в парсере не реализована, а делает она следующее: на вход передается строка, содержащая строковое представление hex-числа (например, "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"). На выходе получаем упакованную строку, где каждая пара входящих символов представляет собой hex-код выходного символа. Пример: "a9" = "©", "4a" = "J" и т. д.

На практике функция используется при авторизации на java-серверах игры Lineage II.

Реализация:
(не оптимальна, зато ясна)
@packH[str][len;i;code;hexcode;hex;res]
$len(^str.length[]\2)
^for[i](0;$len-1){
	$code[^str.mid($i*2;2)] // берем два символа
	$hexcode[0x$code] 
	$hex($hexcode) // получаем из них число
	$res[${res}^char[$hex]] // наращиваем результат
}
$result[$res]
Функцию char подсмотрел здесь у кого-то на форуме. Дабы не искать, тоже привожу здесь:
@char[code][i]
^if(!def $ascii){$ascii[^process{^for[i](1;255){^^#^i.format[%02X]}}]}
$result[^ascii.mid(^code.int(0) - 1;1)]