Почему этот код не работает?
$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!
Заранее спасибо!