Moin vlad,
Mein Problem ist, dass die Variable $input ein string ist, anstatt ein byte array.
Der Sender verschickt ein uint32 und das perl Programm empfängt nur das zuerst gesendete byte, wenn das 2. 0 ist
Das Problem ist die Typen-Abstraktion von Perl. Du musst hier den String umwandeln in einen Integer, dafür gibt es mehrere Möglichkeiten: entweder „von Hand” indem du den ord()-Wert shiftest und orst:
my @bytes = (chr(0x10), chr(0x00), chr(0x80), chr(0x00));
my $int = 0;
foreach my $b (@bytes) {
$int = $int << 8 + ord($b);
}
print $int,"\n";
Hier stellst du händisch den int32 wieder zusammen. Oder du verwendest die dafür vorgesehene Funktion unpack():
my $bytes = chr(0x10) . chr(0x00) . chr(0x80) . chr(0x00);
my ($int) = unpack("N", $bytes);
print $int, "\n";
Beachte, dass das sehr Plattform-abhängig ist, Stichwort Little und Big Endian.
LG,
CK