私は機能を持っています:
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を受け取るには
私は機能を持っています:
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を受け取るには
%%
sprintf
パーセント記号を出力するためにフォーマット文字列で使用されます。
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 パッケージの一部であり、コアではありませんが、他の多くのモジュールで必要とされ、ほとんどのシステムにインストールされる傾向があります。
sub ascii_to_hex ($)
{
return join("", map { '%'.sprintf("%02x", ord($_)) } split(//, shift));
}
単純に%
を 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;