我正在尝试将Perl函数转换为Python函数,但我无法弄清楚Perl与Python函数的某些功能。
Perl功能:
sub reverse_hex {
my $HEXDATE = shift;
my @bytearry=();
my $byte_cnt = 0;
my $max_byte_cnt = 8;
my $byte_offset = 0;
while($byte_cnt < $max_byte_cnt) {
my $tmp_str = substr($HEXDATE,$byte_offset,2);
push(@bytearry,$tmp_str);
$byte_cnt++;
$byte_offset+=2;
}
return join('',reverse(@bytearry));
}
我不确定“push”,“shift”和“substr”在这里做什么在Python中是一样的。
非常感谢任何帮助。
答案 0 :(得分:3)
Perl子程序看起来相当复杂,即从发送的字符串中一次取两个字符块(前16个字符)然后将其反转。另一个Perl选项是:
sub reverse_hex {
return join '', reverse unpack 'A2' x 8, $_[0];
}
首先,unpack
这里一次取两个字符(八次)并生成一个列表。该列表为reverse
d和join
以生成最终字符串。
这是一个完成此任务的Python子程序:
def reverse_hex(HEXDATE):
hexVals = [HEXDATE[i:i + 2] for i in xrange(0, 16, 2)]
reversedHexVals = hexVals[::-1]
return ''.join(reversedHexVals)
列表推导产生八个元素,每个元素包含两个字符。 [::-1]
反转列表的元素,结果为join
并返回。
希望这有帮助!
答案 1 :(得分:0)
我意识到你在询问perl到python的翻译,但如果你对perl有任何控制权,我想指出这个函数比它需要的要复杂得多。
整个事情可以替换为:
sub reverse_hex
{
my $hexdate = shift;
my @bytes = $hexdate =~ /../g; # break $hexdate into array of character pairs
return join '', reverse(@bytes);
}
这不仅缩短了,而且更容易让人头疼。 当然,如果你无法控制perl,你就会被你所处理的事情所困扰。