2016-11-22 1 views
2

% xx HEX 문자를 문자로 변경해야합니다. 이 코드에 노력하고 있지만, 그것은 작동하지 않습니다 그래서 검색 및 교체가 $cadena 이루어집니다16 진수를 perl의 char 문자열로 변환하는 방법

#!/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; 
+2

프로그램의'use warnings'과'use strict'를 항상 넣으십시오. – mkHun

+0

자, 감사합니다. 나는 펄을 배웠다. 모든 조언은 좋다. – Asier

+0

팁 : 대신 긴 클래스와 중복 코드를 피하기 위해'/ ([[xdigit :]] {2})/chr (hex ($ 1))/eg'를 사용할 수 있습니다. – ikegami

답변

2

변경

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; 

합니다.

출력 : @ab

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

고마워. 때로는 가장 바보 같은 짓은하지 않습니다. – Asier

+2

@Asier : 우리 모두는 그 문제가 있습니다. 그래서 우리는 '엄격한 사용'과 '경고 사용'을 사용합니다. –

0

더 나은 정규식 패턴 :

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

는 POSIX 문자가 하나의 진수 문자와 일치, 둘, 그 중 두 가지를 지정할 수 {2}를 사용하는 [:xdigit:]을 설정할 때 사용합니다.

+1

이 무응답은 쉽게 주석으로 게시 될 수 있습니다. – ikegami

+0

@ikegami 댓글에서 제대로 포맷하기가 어렵습니다. – shawnhcorey

+0

* 팁 : 긴 클래스와 중복 코드를 피하기 위해's/([[: xdigit :]] {2})/chr (hex ($ 1))/eg'을 사용할 수 있습니다. * – ikegami

관련 문제