perl中如何将十六进制转换为char字符串
Posted
技术标签:
【中文标题】perl中如何将十六进制转换为char字符串【英文标题】:How to convert hex to char string in perl 【发布时间】:2017-04-05 22:04:15 【问题描述】:我需要将 %xx 十六进制字符更改为字符。我正在尝试使用此代码,但它不起作用:
#!/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;
【问题讨论】:
始终将use warnings
和use strict
放在程序顶部。
好的,谢谢您的建议。我正在学习 perl,所有建议都很好。
提示:您可以改用s/([[:xdigit:]]2)/chr(hex($1))/eg
来避免长类和冗余代码。
【参考方案1】:
改变
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
【讨论】:
非常感谢。有时我看不到最愚蠢的失败。 @Asier:我们都有这个问题。这就是我们有use strict
和use warnings
的原因。【参考方案2】:
更好的正则表达式模式:
$cadena =~ s/([[:xdigit:]]2)/chr(hex($1))/eg;
使用 POSIX 字符集 [:xdigit:]
匹配单个十六进制字符,使用 2
指定两个且仅两个。
【讨论】:
这个未回答的问题很容易作为评论发布。 一点也不:提示:您可以改用s/([[:xdigit:]]2)/chr(hex($1))/eg
来避免长类和冗余代码。
在s///
的 LHS 上将 $cadena
更改为 my $string
与修复错误相反!以上是关于perl中如何将十六进制转换为char字符串的主要内容,如果未能解决你的问题,请参考以下文章