Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Выбрать данные из строки.


Автор: Cyr 2.4.2014, 12:14
есть строка, в ней есть такая hex последовательность: 61 {x+4} 30 {x+2} 80 {x} {y...y}
где {x} - длина значения {y...y}.
нужно получить {y...y}.
если после 61 стоит 02, то {y...y} отсутствует.

Автор: arto 2.4.2014, 13:30
ничего не понял

Автор: Cyr 2.4.2014, 14:01
arto,
ну вот вариант: 
Код

my $hexdata="A1 07 30 05 80 03 31 31 31 63 07 30 05 80 03 31 31 31 61 07 30 05 80 03 31 30 36 62 07 30 05 80 03 31 31 31 64 02 88 00 4E 01 02 0A 01 16";
if ($hexdata =~m/61 .. 30 .. 80 /) {
        $x= hex(substr($', 0, 2));
        $str = substr($', 3, $x*3);
        $str =~s/\s//g;
        $y=pack ("H*", $str); 
        print "$y \n";    
}

Только может можно как-то проще сделать?

Автор: arto 2.4.2014, 15:47
m#61 (\d+) 30 (\d+) 80 (\d+)#g && ( $1 > 2 && $2+2==$1 && $3+2==$2 ) && print substr$_,pos()+1,$3

Автор: Cyr 3.4.2014, 08:26
arto,
вот так работает. 
Код

my $hexdata="A1 07 30 05 80 03 31 31 31 63 07 30 05 80 03 31 31 31 61 07 30 05 80 03 31 30 36 62 07 30 05 80 03 31 31 31 64 02 88 00 4E 01 02 0A 01 16";
$_ = $hexdata;
m#61 (..) 30 (..) 80 (..)#g && print substr $_, pos()+1, $3* 3; print "\n";

Спасиб.

Автор: arto 3.4.2014, 10:42
тогда уж $3* 3 - 1

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)