Аналог функции pack (PHP)

Lonely Soul

Житель города
#1
Добрый день!
Имеется такой код на php:
$secret = "AFD282B892711DCED1A4E15B0EDD10E1533754352C6527B5";
$secret = pack('H*', $secret);

В итоге получаем:
ЇТ‚ё’pОС¤б;ЭбS7T5,d'µ

Необходимо проделать тоже самое в С++/Delphi. Для Delphi сделано как-то так:

function HexToStr(HexStr : String; const Text : boolean = True) : string;
var
Hex : byte;
sTemp : string;
i : integer;
begin
Result := '';
if Length(HexStr) mod 2 <> 0 then
Exit;
for i := 2 to Length(HexStr) do
if i mod 2 = 0 then begin
sTemp := '$' + Copy(HexStr, i - 1, 2);
Hex := Byte(StrToInt(sTemp));
if Hex = $00 then begin
if Text then
Result := Result + ' '
else
Result := Result + #$00;
Continue;
end;
Result := Result + chr(Hex);
end;
end;

Далее:
HexToStr('AFD282B892711DCED1A4E15B0EDD10E1533754352C6527B5');

В итоге получаем нечто похожее с конца:
¯Ò‚¸’pÎѤá;ÝáS7T5,d'µ

В PHP правильный вариант. Как проделать аналогичные преобразования в Delphi/C++?:banghead:



 

Canniballissimo

Житель центра
#3
автор, ты не думал, что при выполнении этих алгоритмов на PHP и delphi может использоваться различная кодировка?
 

Sleepwalker

Let the galaxy burn
Команда форума
#10
Насчет кодировки - не согласен ^_^
Впрочем - вон код, кому интересно - курите.
 

Canniballissimo

Житель центра
#11
Это первое о чем подумал, но увы, результат тот же)
Но с другой стороны. Тебе важна совместимость кода на PHP и Delphi, чтобы паковать в одном, а распаковывать в другом, или просто нужен тот же функционал?
 

Lonely Soul

Житель города
#12
Но с другой стороны. Тебе важна совместимость кода на PHP и Delphi, чтобы паковать в одном, а распаковывать в другом, или просто нужен тот же функционал?
Этот код генерирует одноразовый пароль на основе ключа от eToken PASS и потом сравнивается с тем, что ввел пользователь с самого eToken. Если совпали - все ок. Нужна аналогичная функциональность на Delphi.
Просто единственный рабочий пример взаимодействия нашел только на php на хабре)
 

Lonely Soul

Житель города
#13
Вообщем оказалось все довольно просто :) pack с параметром H* превращает последовательность байт в символы. Теперь проблема в том, что как то коряво отображается в кодировка 1252.
Есть тут кто может переписать эти злополучные 20 строчек в Delphi XE3??? Ессно не бесплатно :)

p.s. на php функции уже написаны и работают
 

Corrector

Житель окраин
#14
Всегда удивлялся генотипическим образованиям, которые при возникновении узкоспециализированного технического характера, ищут решения на местных форумах. Зачем? Что за юношеский локальный патриотизм? Ну есть же специализорованные форумы, где вам ответят гораздо быстрее и по делу. Что на том же хабре не судьба спросить?
 

Diesell

Троглодит
#15
Да переписать этот гавнокод на дельфи может любой дурак, кто пишет на дельфи. Другое дело что на нем уже практически никто не пишет, все сидят на C#
Хотя у меня есть знакомый. Сформулируй четко ТЗ и я ему передам.
 

Lonely Soul

Житель города
#16
Всегда удивлялся генотипическим образованиям, которые при возникновении узкоспециализированного технического характера, ищут решения на местных форумах. Зачем? Что за юношеский локальный патриотизм? Ну есть же специализорованные форумы, где вам ответят гораздо быстрее и по делу. Что на том же хабре не судьба спросить?
Вопрос был задан на специализированных форумах недели 2 назад. Ответа так и не последовало. На данном форуме был задан уже от нечего делать.
 

Lonely Soul

Житель города
#17
Помнится писал на шарпе в вс, что бы проект на другой машине запустить нужно было кучу всякого хлама еще перетащить. В Delphi екзешник перенес и все. Может сейчас ситуация уже и лучше.

Вопрос уже разрешился. Тема более не актуальна.