Christian Kruse: perl udp socket recv binary data

Beitrag lesen

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