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 warningsuse 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 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 与修复错误相反!

以上是关于perl中如何将十六进制转换为char字符串的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在 Python 中将十六进制转换为十进制? [复制]

将十六进制字符串(char [])转换为int?

如何将十六进制字符串转换为C中的二进制文件

在 C 中将 ascii char[] 转换为十六进制 char[]

如何将 unsigned char 值表示为十六进制字符串?