Ich versuche, einen vorzeichenlosen Long-Wert zu entpacken, der von einem C-Programm an ein Perl-Skript über SysV::IPC übergeben wird.
Es ist bekannt, dass der Wert korrekt ist (ich habe einen Test durchgeführt, bei dem derselbe Wert in zwei Warteschlangen gesendet wird, wobei eine von Perl und die zweite von der C-Anwendung gelesen wird), und alle vordefinierten Werte werden korrekt gelesen (mit q
anstelle von i!
um mit 64-Bit-Ganzzahlen zu arbeiten).
Es ist auch bekannt, dass PHP etwas Ähnliches in bugs (Suche nach "unsigned long on 64 bit machines") (scheint ähnlich zu sein: Packen/Entpacken eines 64-Bit-Int auf einer 64-Bit-Architektur in PHP )
Bisher getestete Argumente:
- ..Q ( = ein Wert, der größer ist als erwartet)
- ..L ( = 0)
- ..L! ( = großer Wert)
- ..l ( = 0)
- ..l! ( = großer Wert)
- ..lN! ( = 0)
- ..N, ..N! ( = 0)
use bigint; use bignum;
-- keine Wirkung.
Einzelheiten:
sizeof(unsigned long)
= 8;Data::Dumper->new([$thatstring])->Useqq(1)->Dump();
eine Menge Null-Bytes entlang einiger sinnvoller- byteorder='12345678';
S - x4Q
mit einer Auffüllung von vier Bytes.