Thread einzelne Bytes in Perl (19 answers)
Opened by campbell-bs at 2011-11-17 15:42

rosti
 2011-11-22 19:12
#154426 #154426
User since
2011-03-19
3205 Artikel
BenutzerIn
[Homepage]
user image
2011-11-22T08:13:04 campbell-bs
Ja, es geht in die Richtung, aber wie kann ich einen beliebig langen String in ein Bytearray aufteilen und dies verschicken?


Eins vorweg: Perl unterscheidet seit v5.6 zwischen Strings und Oktetten. Bei ASCII/ISO ist das egal, aber wenn Du utf8-Strings hast, musst Du die in Oktetten umwandeln (siehe Encode.pm).

Zum "Senden" gehen also IMMER Oktetten in ein Handle, STDOUT oder ein Socket. Solche Bytesequenzen können in Records unterteilt sein, womit die wieder gelesen werden können.

1 Records mit konstanter Länge:
=======================================

Code (perl): (dl )
my $byteRec = pack "Z100", $oktetten;


=> Jeder Record het eine Länge von 100 Bytes, die sind also aus dem HAndle zu lesen (Perl-Funktion reed()). Ist die Oktettenlänge > 99, wird abgeschnitten, ist sie kürzer, wird mit Nullen-Bytes aufgefüllt.

2 Records mit variabler Länge
========================================

Ein kleiner Algorithmus: Ermittele die Oktettenlänge und erzeuge mit diesem Integer 4 Bytes mit einer geeigneten Schablone:

Code (perl): (dl )
my $len_in_bin = pack "N", length $oktets;


Die Länge $len_in_bin hat immer 4 Bytes (32 bit), dann schreibe die Oktetten in den Stream. Zum Lesen genau umgekehrt: 4 Byte lesen, Du bekommst die Länge, die wird dann gelesen, Du bekommst die Oktetten. Dann wieder genau 4 Bytes lesen uswusf.

Andere, kompliziertere Algorithmen beschreiben die Serialisierung von komplexen Datenstrukturen... siehe Storable.pm, Funktion freeze().

View full thread einzelne Bytes in Perl