2014-07-16 2 views
1

Math :: BaseCalc 모듈을 사용하여 base64 숫자를 16 진수로 변환하려고합니다. 여기 내 코드는 지금까지 있습니다 :Perl의 Math :: BaseCalc 관련 문제

#!/usr/bin/env perl 
use Math::BaseCalc; 

my $calc64 = new Math::BaseCalc(digits =>['+','/','A'..'Z','a'..'z',0..9]); 
my $calcHex = new Math::BaseCalc(digits =>[0..9,'a'..'f']); 
$bvals="NU5+MSHRUIy07OQNb20WAc"; 
$btemp=$calc64->from_base($bvals); 
$bhex=$calcHex->to_base($btemp); 
print "$bhex\n"; 

이의 출력은 내가 $의 bvals 많은 예를 들어 번호를 시도 항상 0, 나는 처음부터 + 및/문자 이동, 64 기수의 숫자를 reodering 시도 끝까지, 중간 등에서는 아무 소용이 없습니다. 그것은 정확하게 하나의 번호로 작동하지만, 나는 그것이 나에게 준 숫자가 32 였기 때문에 그것이 제대로 작동하고 있다고 믿지 않는다. 그 숫자의 숫자가 32로 표현 될 수있는 방법이 없다.

이 숫자는 너무 간단 한가? 큰? 그렇다면 무엇을 할 수 있습니까?

편집 : 결과적으로 숫자가 너무 커서 (버전에 관계없이) 버전 1.014를 사용하고있었습니다. 내 솔루션은 다음과 같습니다 :

my $calc64 = new Math::BaseCalc(digits =>['+','/','A'..'Z','a'..'z',0..9]); 
my $calcHex = new Math::BaseCalc(digits =>[0..9,'a'..'f']); 
$bvals="FztKXccUj73D8ZAPlnAfmE"; 
$btemp=Math::BigInt->new($calc64->from_base($bvals)); 
$bhex=$calcHex->to_base($btemp); 
print "$bhex\n"; 
+1

저의 작은 숫자로 작동합니다. https://metacpan.org/source/KWILLIAMS/Math-BaseCalc-1.017/t/04-bigint.t를보십시오. – toolic

+0

그 리소스의 문제는 BigInt가 10 진수를 취하고, 큰베이스 64 INTO를 변환해야한다는 것입니다. 십진수. '$ btemp = $ calc64-> from_base ($ bvals);'의 결과를 BigInt 스칼라에 대입하면된다. 내 주요 문제는 BigInt가 유용한 방식으로 어떻게 작동 할 것인지 이해하지 못한다는 것입니다. – doomsday

+1

접근 방법에 대해 BaseCalc 모듈 작성자에게 전자 메일을 보냅니다. – toolic

답변

0

결론적으로 숫자는 버전에 관계없이 너무 커서 버전 1.014를 사용하고있었습니다. 내 솔루션은 다음과 같습니다.

my $calc64 = new Math::BaseCalc(digits =>['+','/','A'..'Z','a'..'z',0..9]); 
my $calcHex = new Math::BaseCalc(digits =>[0..9,'a'..'f']); 
$bvals="FztKXccUj73D8ZAPlnAfmE"; 
$btemp=Math::BigInt->new($calc64->from_base($bvals)); 
$bhex=$calcHex->to_base($btemp); 
print "$bhex\n";