Я использую механизм select(), sysread(), syswrite() для обработки сообщений сокета, где сообщения sysread() в $ buffer (двоичные) перед их записью.Как я могу изменить определенную часть бинарного скаляра в Perl?
Теперь я хочу изменить два байта сообщения, которые обозначают длину всего сообщения. Во-первых, я использую следующий код:
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 ...». Я вставляю цифровой номер в буфер $, но, наконец, получил 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 ...» Я просто удивляюсь, почему два бинарных скаляра не могут быть объединены в бинарный скаляр?
Помогите мне? Спасибо!
Вы правы! Я страдаю этой проблемой в течение многих дней! Большое спасибо! – boyang