PHP упаковать и распаковать - PullRequest
       38

PHP упаковать и распаковать

0 голосов
/ 25 февраля 2020

Почему этот код не работает?

$src = "source";
$dst = "destination";
$data = pack( 'C*', 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0xBC, 0x02, 0x30, 0x02, 0xF4, 0x00, 0x00, 0x40, 0x40, 0x40, 0xBF, 0xBF, 0xBF, 0x10);
$msg = pack('Z*Z*CA*', $src, $dst, strlen($data), $data);

$message = unpack('Z*src/Z*dst/Clen/H*msg', $msg);
print_r($message);

Я протестировал его на своей локальной PHP установке и онлайн-компиляторе. Оба выдали одно и то же сообщение об ошибке:

PHP Warning:  unpack(): Type C: not enough input, need 1, have 0 in source_file.php on line 6

Строка 6 - это строка, в которой используется функция распаковки. Онлайн-справка PHP о функции упаковки / распаковки чрезвычайно лаконична. При ссылке на документацию Perl, большинство из них не работает в PHP. Тот же код выше (с небольшой Perl адаптацией) работает в Perl следующим образом:

$src = "source";
$dst = "destination";
$data = pack( 'C*', 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0xBC, 0x02, 0x30, 0x02, 0xF4, 0x00, 0x00, 0x40, 0x40, 0x40, 0xBF, 0xBF, 0xBF, 0x10);
$msg = pack('Z*Z*CA*', $src, $dst, length($data), $data);


($s1, $d1, $l1, $sm) = unpack('Z*Z*CA*', $msg);

print 'S1:'.$s1."\n";
print 'D1:'.$d1."\n";
print 'L1:'.$l1."\n";
print 'SM:'.$sm."\n";

Кто-нибудь просветит меня, почему на земле этот код не работает? И есть ли где-нибудь полное руководство или руководство по функциям inte rnet PHP pack / unpack? Я уже читал статью о функциях для Perl по этой ссылке: https://perldoc.perl.org/perlpacktut.html

Это не очень полезно для PHP!

Заранее спасибо!

...