【发布时间】:2010-10-12 20:34:03
【问题描述】:
我采用 select(), sysread(), syswrite() 机制来处理套接字消息,其中消息在 syswrite 之前被 sysread() 放入 $buffer(二进制)。
现在我想更改消息的两个字节,它们表示整个消息的长度。首先,我使用以下代码:
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,那么修改后的 $buffer 将为“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...” 我只是想知道为什么两个二进制标量不能合并成一个二进制标量?
你能帮帮我吗?谢谢!
【问题讨论】: