3

私は機能を持っています:

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

4 に答える 4

11

%%sprintfパーセント記号を出力するためにフォーマット文字列で使用されます。

于 2012-08-21T12:53:04.747 に答える
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 パッケージの一部であり、コアではありませんが、他の多くのモジュールで必要とされ、ほとんどのシステムにインストールされる傾向があります。

于 2012-08-21T15:31:53.940 に答える
0
sub ascii_to_hex ($)
{
  return join("", map { '%'.sprintf("%02x", ord($_)) } split(//, shift));
}
于 2012-08-21T12:50:16.357 に答える
0

単純に%を 2 倍にしてエスケープします。

( 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;
于 2012-11-16T01:42:06.873 に答える