2

我有一个包含一些整数的数组,我想将它转换为十六进制值的字符串。这是我使用的代码,它工作正常。我只是想知道是否有更简单的方法来做到这一点。

my @arr = get_tw() ; ##array of integer

for(my $i=0;$i<@arr;$i++){ 

  $arr[$i]= sprintf('%02x',$arr[$i]); ##overwrite with the hex value

} 

my $string  = join('',@arr); ##build a string from a array

谢谢

4

3 回答 3

4

地图。如果您不需要它用于其他任何事情,这可以避免中间数组变量。

my $string = join '', map { sprintf '%02x', $_ } get_tw();

完整示例:

use warnings;
use strict;

sub get_tw { return 8 .. 15 }

my $string = join '', map { sprintf '%02x', $_ } get_tw();
print "$string\n";

__END__

08090a0b0c0d0e0f
于 2013-11-14T18:11:15.723 回答
4

sprintf带有模板的字符串重复运算符:

my $string = sprintf "%02x" x @arr, @arr
于 2013-11-14T18:14:33.050 回答
4

使用打包/解包:

my $string = join '', unpack('H*', pack('c*',@arr)); 
于 2013-11-14T18:37:50.547 回答