Perl函数string2hex

时间:2012-08-21 12:43:30

标签: perl

我有一个功能:

sub ascii_to_hex ($)
{
    ## Convert each ASCII character to a two-digit hex number.
    (my $str = shift) =~ s/(.|\n)/sprintf("%02lx", ord .$1)/eg;
    return $str;
}

我需要在每个数字前添加'%'。收到%68%75%44

4 个答案:

答案 0 :(得分:11)

%%sprintf格式字符串中用于打印百分号。

答案 1 :(得分:3)

CPAN解决方案:

use URI::Escape;
sub ascii_to_hex { return uri_escape(shift, "\x00-\xFF"); }

或者

use URI::Escape qw(%escapes);
sub ascii_to_hex {
    (my $str = shift) =~ s/[\s\S]/$escapes{$1}/g;
    return $str;
}

URI :: Escape是URI包的一部分,虽然不是Core,但它是许多其他模块所必需的,并且确实倾向于安装在大多数系统上。

答案 2 :(得分:0)

sub ascii_to_hex ($)
{
  return join("", map { '%'.sprintf("%02x", ord($_)) } split(//, shift));
}

答案 3 :(得分:0)

简单地通过加倍%来逃避它。

( my $str = shift ) =~ s/(.)/ sprintf "%%%02x", ord $1 /seg;
return $str;

但这肯定要快一点:

( my $str = unpack 'H*', shift ) =~ s/(..)/%$1/sg;
return $str;

顺便说一句,从5.14开始,你可以做到

return unpack('H*', shift) =~ s/(..)/%$1/sgr;