При работе с распаковкой я надеялся, что b3 вернет битовую строку длиной 3 бита.Разбиение битовых строк в Perl
код, который я надеялся писать (для разбора пакета данных WebSocket) был:
my($FIN,$RSV1, $RSV2, $RSV3, $opcode, $MASK, $payload_length) = unpack('b1b1b1b1b4b1b7',substr($read_buffer,0,2));
Я заметил, что это не то, что я надеялся.
Если я использовал b16 вместо шаблона выше, я получаю все 2 байта, загруженные в первую переменную, как «1000000101100001».
Это здорово, и у меня нет проблем с этим.
Я могу использовать то, что у меня есть, сделав кучу подстрок, но есть ли лучший способ сделать это? Я надеялся, что будет способ обработать эту битовую строку с шаблоном, подобным тому, который я попытался сделать. Какая-то функция, где я могу передать спецификацию пакета с правой стороны и список переменных слева?
Редактировать: Я не хочу делать это с регулярным выражением, так как он будет в очень узкой петле, которая будет происходить много.
Edit2: В идеале было бы неплохо указать, какую битовую строку следует оценивать как (логическое, целое и т. Д.).
Что находится в '$ read_buffer'? –
@ SinanÜnür $ read_buffer - это двоичные данные для пакета – GoldenNewby