【问题标题】:How to convert hex to char string in perlperl中如何将十六进制转换为char字符串
【发布时间】: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 warningsuse strict 放在程序顶部。
  • 好的,谢谢您的建议。我正在学习 perl,所有建议都很好。
  • 提示:您可以改用s/([[:xdigit:]]{2})/chr(hex($1))/eg 来避免长类和冗余代码。

标签: perl char hex


【解决方案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 strictuse 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 与修复错误相反!
猜你喜欢
  • 2019-10-04
  • 2020-07-18
  • 1970-01-01
  • 2013-02-07
  • 2010-12-04
相关资源
最近更新 更多