我想做的很简单。在下面。
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;
它不起作用:(请你帮忙吗?
答案 0 :(得分:8)
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;
完成没有中间数组的事情。
答案 1 :(得分:3)
我对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));