select(), sysread(), syswrite() 메커니즘을 사용하여 메시지를 sysread()가 syswritten되기 전에 $ buffer (바이너리)로 처리하는 소켓 메시지를 처리합니다.Perl에서 바이너리 스칼라의 특정 부분을 어떻게 수정할 수 있습니까?
이제 전체 메시지의 길이를 나타내는 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 ..."가됩니다. $ 버퍼에 디지털 번호를 삽입했지만 마침내 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 개의 2 진 스칼라가 2 진 스칼라에 결합 될 수 없는지 궁금합니다.도와 주시겠습니까? 고맙습니다!
네 말이 맞다! 나는 여러 날 동안이 문제로 고통 받고 있습니다! 고마워요! – boyang