Я хочу кодировать числа в N бит-контейнерах и отправлять их в UDP-пакет. Приемник будет знать, N, и приемник будет захватывать число от ровно N битов (N < = 64)Perl: пакет int для произвольной длины байтовой строки
Somethink как это:.
sub to56BIT {
return pack("??", shift);
}
sub to24BIT {
return pack("??", shift);
}
my $n = 7;
to24BIT($n);
на стороне приемника:
int n = Get_val24(byte_stream, offset);
Есть ли способ сделать это в Perl?
Я думаю, что решение может быть:
sub packIntN {
my $int = shift;
my $length = shift;
return pack("B" . $length, substr(unpack("B64", pack("Q>", $int)), 64 - $length));
}
Но, может быть, есть более элегантный способ.
ввода/вывода Пример: У нас есть сценарий test.pl:
use strict;
use warnings;
sub to24BIT {
#???
}
my $n = 7;
print to24BIT($n);
Я хочу это:
./test.pl | hexdump -C
00000000 00 00 07 |...|
00000003
Другой сценарий test2.pl:
use strict;
use warnings;
sub to40BIT {
#???
}
my $n = 7;
print to40BIT($n);
I хочу этого:
./test.pl | hexdump -C
00000000 00 00 00 00 07 |.....|
00000005
Можете ли вы представить пример ввода/вывода? – melpomene
@melpomene, конечно. Я добавил пример. – peroksid
Является ли N всегда целым множителем 8? (Один из 8, 16, 24, 32, 40, 48, 56, 64) – ikegami