私はsysread()をsysread()がsyswrittenされる前に$ buffer(バイナリ)に置くソケットメッセージを処理するためにselect()、sysread()、syswritePerlでバイナリスカラーの特定の部分を変更する方法はありますか?
ここで、メッセージ全体の長さを表す2バイトのメッセージを変更します。まず、次のコードを使用します。
my $msglen=substr($buffer,0,2); # Get the first two bytes
my $declen=hex($msglen);
$declen += 3;
substr($buffer,0,2,$declen); # change the length
ただし、このようには動作しません。 $ declenの最終値が85の場合、変更された$バッファは "0x35 0x35 0x00 0x02 ..."になります。私はデジタル番号を$ bufferに挿入するが、最終的にASCIIを得た!
私もこの方法を試してみました:
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);
悲しいことに、この方法も失敗しました。結果は "0x33 0x 0x00 0x02 ..."です。なぜ私は2つのバイナリスカラーをバイナリスカラーに結合できないのでしょうか?
私を助けることができますか?ありがとうございました!
あなたは正しいです! 私は何日間もこの問題に苦しんできました!どうもありがとうございました! – boyang