Я пытаюсь распаковать длинное значение без знака, которое передается из программы на C в сценарий Perl через SysV :: IPC.
Известно, что значение верное (я сделал тест, который отправляет одно и то же значение в две очереди, одну читает Perl, а другую приложение C), и все предшествующие значения читаются правильно (используется q
вместо i!
для работы с 64-битными целыми числами).
Также известно, что в PHP было что-то похожее в ошибках (поиск "unsigned long на 64-битных машинах") (похоже, похоже:
Упаковать / распаковать 64-битное int на 64-битной архитектуре в PHP )
Аргументы, проверенные до сих пор:
- .. Q (= некоторое значение больше ожидаемого)
- .. L (= 0)
- .. L! (= большое значение)
- .. l (= 0)
- .. л! (= большое значение)
- .. Л.Н.! (= 0)
- .. N, ..N! (= 0)
use bigint; use bignum;
- без эффекта.
подробности:
sizeof(unsigned long)
= 8;
Data::Dumper->new([$thatstring])->Useqq(1)->Dump();
много нулевых байтов вместе с некоторыми значащими ..
- = порядком байтов '12345678';
Решение:
- x4Q
с заполнением четырьмя байтами.