如何在 Perl 中将十六进制数转换为字符字符串

问题描述 投票:0回答:2

我需要将 %xx hexadecimal 字符更改为字符。我正在尝试使用此代码,但它不起作用:

#!/usr/bin/perl -w

my $cadena = "%40%61%62";
print $cadena . "\n";
$cadena =~ s/%//g;
print "cad: " . $cadena . "\n";
my $string =~ s/([a-fA-F0-9][a-fA-F0-9])/chr(hex($1))/eg;
print "traducida: ".$string;
perl char hex
2个回答
8
投票

改变

my $string =~ s/([a-fA-F0-9][a-fA-F0-9])/chr(hex($1))/eg;

$cadena =~ s/([a-fA-F0-9][a-fA-F0-9])/chr(hex($1))/eg;

以便在

$cadena
上完成搜索和替换。

输出:

@ab

40 => @
61 => a
62 => b

2
投票

更好的正则表达式模式:

$cadena =~ s/([[:xdigit:]]{2})/chr(hex($1))/eg;

使用 POSIX 字符集

[:xdigit:]
来匹配单个十六进制字符,并使用
{2}
来指定两个且仅其中两个。

© www.soinside.com 2019 - 2024. All rights reserved.