Perl 为什么不是';我的包不能打包我的数据吗?

Perl 为什么不是';我的包不能打包我的数据吗?,perl,Perl,我想做的很简单。在下面 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

我想做的很简单。在下面

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;

而且它不起作用:(请您帮忙好吗?

我对
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));

我对
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));

TLP的解决方案非常正确,但是
pack
实际上具有处理hex的能力

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;

不需要中间数组就可以完成整个任务。

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;

如果没有中间阵列,整个事情都会发生。

也许你可以告诉每个人它是以什么方式不工作的?“那么,你的车怎么了?”“它不工作了!”/“那么,你今天感觉如何?”“我不工作了!”/“好像是什么问题?”“我的电脑不工作了!”//不,这个短语在车库、医生办公室或计算机支持部门都不起作用。不知道为什么人们认为它会对StackOverflow起作用。我应该像TLP说的那样使用('C*',@hexdata)。
my@arr=split(//\s+/,“50 00 9F…0C-FE”);
最好写成
my@arr=qw“50 00 9F…0C-FE”
。也许你可以告诉每个人它以什么方式不工作?“那么,你的车怎么了?”“它不工作了!”/“那么,你今天感觉怎么样?”“我不工作了!”/“好像有什么问题?”“我的电脑不工作了!”//不,这个短语在车库、医生办公室或计算机支持部门都不起作用。不知道为什么人们认为它会对StackOverflow起作用。我应该像TLP说的那样使用('C*',@hexdata)。
my@arr=split(//\s+/,“50 00 9F…0C-FE”);
最好写成
my@arr=qw“50 00 9F…0C-FE”
。谢谢#TLP。我得到的是-1而不是时间戳:(.这是代码:@Fighter2如果这不能解决你的问题,你应该问一个后续问题。它确实解决了我的问题,我很感激你。我很感激。我只是觉得你心里会有更多的空间让grace看看我写的代码,并帮我为什么我没有得到时间戳和'else',而不是进入我的'else'if’条件。我花了一整天的时间在它上面。我花了一天的时间,可能只花了你几分钟。不是每个人都会用Perl冗长。@Fighter2我很乐意帮助你解决你的任何具体问题,但你必须自己调试。与将
C
更改为
C*
@Fighter2:As TL相比,你要问的不是一件小事P写道,接受此问题的一个已发布的答案,然后发布一个新答案解决下一个问题。这也可能会提高您获得快速答复的机会,因为TLP可能不会整天都在这里回答。谢谢35; TLP。我得到-1而不是时间戳:(.这是代码:@Fighter2如果这不能解决你的问题,你应该问一个后续问题。它确实解决了我的问题,我很感激你。我很感激。我只是觉得你心里会有更多的空间让grace看看我写的代码,并帮我为什么我没有得到时间戳和'else',而不是进入我的'else'if’条件。我花了一整天的时间在它上面。我花了一天的时间,可能只花了你几分钟。不是每个人都会用Perl冗长。@Fighter2我很乐意帮助你解决你的任何具体问题,但你必须自己调试。与将
C
更改为
C*
@Fighter2:As TL相比,你要问的不是一件小事P写道,接受这个问题的一个已发布的答案,然后发布一个新的答案来解决你的下一个问题。这也可能会提高你获得快速回复的机会,因为TLP可能不会整天都在你身边。