我正在编写一个Perl程序,它从两个套接字发送和接收消息,并将acta作为交换机。我必须修改从一个套接字接收的接收消息,在数据前加3个字节,最后将修改后的消息发送到另一个套接字。我采用select()... sysread()... syswrite()机制来轮询套接字之间的消息。收到的消息在修改期间存储在$ buffer中。
现在我可以使用以下方式获取收到的消息:
my $hexmsg = unpack("H*", $buffer);
my @msg = ( $hexmsg =~ m/../g );
然后我可以向@msg插入3个字节。但是,我不知道如何将@msg中的消息打包到标量(例如$ buffer)中,并通过syswrite()将其发送到另一个套接字。有谁能够帮我?提前谢谢!
BTW,是$ buffer二进制文件中的消息?答案 0 :(得分:3)
是的,$ buffer中的消息是二进制的(如果我猜错了你的意思)。如果将其解压缩到@msg的唯一原因是插入字节,请不要。请改用substr,然后写出更改后的$ buffer。例如:
substr( $buffer, 0, 0, "\x01\x02\x03" ); # insert 3 bytes at beginning.
如果你正在使用@msg做其他事情,你可以继续使用它 在写出之前执行substr insert,或者你可以使用substr或pack或split 或vec或正则表达式来解析你需要的部分。你需要描述一下你的情况 正在努力获得更具体的帮助。
答案 1 :(得分:1)
如果您已使用unpack
从$buffer
获取数据,您是否尝试过使用pack
将数据重新放入其中?