Почему мой пакет () не упаковывает мои данные? - PullRequest
1 голос
/ 03 февраля 2012

То, что я пытаюсь сделать, просто.Вот ниже.

my @arr = split(/\s+/,"50 00 9F 11 00 28 82 48 21 84 BC 00 01 02 01 00 09 01 38 00 23 05 08 01 01 02 00 00 18 00 50 05 00 00 00 00 00 00 00 00 02 00 0C FE CE 00 0F 00 FD FF 2D 00 00 00 00 00 04 01 0C FE");
my @hexData;
my $i=0;
foreach my $elem(@arr){
    $hexData[$i]=hex($elem);
    $i++;
}
my $data= pack ('C', @hexData);
print $data;

И это не работает :( Не могли бы вы помочь?

Ответы [ 2 ]

8 голосов
/ 03 февраля 2012

Решение TLP совершенно верно, но pack на самом деле имеет возможность иметь дело с гексами.

my $data = "50 00 9F 11 00 28 82 48 21 84 BC 00 01 02 01 00 09 01 38 00 23 05 08 01 01 02 00 00 18 00 50 05 00 00 00 00 00 00 00 00 02 00 0C FE CE 00 0F 00 FD FF 2D 00 00 00 00 00 04 01 0C FE";
$data =~ tr/ //d; # Remove the spaces
print pack "H*", $data;

делает все это без промежуточного массива.

3 голосов
/ 03 февраля 2012

Я не очень знаком с функцией pack, но мне кажется, что ваш шаблон ожидает только одно значение.

Возможно, вам следует попробовать

my $data = pack ('C*', @hexData);

И хотяобновите свой код до чего-то более изощренного:

my @arr = qw(50 00 9F 11 00 28 82 48 21 84 BC 00 01 02 01 00 09 01 38 00 23 05 
             08 01 01 02 00 00 18 00 50 05 00 00 00 00 00 00 00 00 02 00 0C FE 
             CE 00 0F 00 FD FF 2D 00 00 00 00 00 04 01 0C FE);
my @hexData;

foreach my $elem (@arr) {
    push @hexData, hex($elem);
}

my $data = pack ('C*', @hexData);
print $data;

или даже:

my $data = pack("C*", map(hex, @arr));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...