Ich adoptieren select(), sysread(), syswrite() -Mechanismus, um Socket-Nachrichten zu behandeln, in denen Nachrichten sysread() in $ buffer (binär) sind, bevor sie syswritten sind.Wie kann ich bestimmte Teile eines binären Skalars in Perl ändern?
Jetzt möchte ich zwei Bytes der Nachricht ändern, die die Länge der gesamten Nachricht angeben. Zuerst verwende ich folgenden Code:
Allerdings funktioniert es nicht auf diese Weise. Wenn der Endwert von $ declen 85 ist, dann wird der modifizierte $ Puffer "0x35 0x35 0x00 0x02 ..." sein. Ich füge digitale Zahl zu $ Puffer ein, aber erhielt schließlich ASCII!
Ich habe auch versucht, auf diese Weise:
my $msglen=substr($buffer,0,2); # Get the first two bytes,binary
$msglen += 0b11; # Or $msglen += 3;
my $msgbody=substr($buffer,2); # Get the rest part of message, binary
$buffer=join("", $msglen, $msgbody);
diese Methode leider auch gescheitert. Das Ergebnis ist wie folgt: "0x33 0x 0x00 0x02 ..." Ich frage mich nur, warum zwei binäre Skalare nicht zu einem binären Skalar zusammengefügt werden können.
Können Sie mir helfen? Vielen Dank!
Sie haben Recht! Ich habe seit vielen Tagen mit diesem Problem zu leiden! Vielen Dank! – boyang