在perl中将基数10转换为base36

时间:2012-10-10 14:57:19

标签: perl converter

  

可能重复:
  What’s the best way to do base36 arithmetic in Perl?

您好可以使用perl脚本转换基数为10到36的转换数字吗?

这是一个例子:

base 10 - 1234567890123 and outcome
base 36 - FR5HUGNF

3 个答案:

答案 0 :(得分:4)

尝试使用Math::Base36 CPAN库进行基本转换。

答案 1 :(得分:2)

查看Math::Base36源代码,可以看出实现转换的难易程度:

sub encode_base36 {
    my ( $number, $padlength ) = @_;
    $padlength ||= 1;

    die 'Invalid base10 number'  if $number    =~ m{\D};
    die 'Invalid padding length' if $padlength =~ m{\D};

    my $result = '';
    while ( $number ) {
        my $remainder = $number % 36;
        $result .= $remainder <= 9 ? $remainder : chr( 55 + $remainder );
        $number = int $number / 36;
    }

    return '0' x ( $padlength - length $result ) . reverse( $result );
}

答案 2 :(得分:0)

编写子程序来执行此操作非常简单。下面的代码没有值检查,并假设要转换的数字总是非负的

如果您的Perl版本没有足够的最新版本来支持state关键字,那么只需将$symbols声明为程序开头的my变量< / p>

use strict;
use warnings;

use feature 'state';

print base36(1234567890123);

sub base36 {
  my ($val) = @_;
  state $symbols = join '', '0'..'9', 'A'..'Z';
  my $b36 = '';
  while ($val) {
    $b36 = substr($symbols, $val % 36, 1) . $b36;
    $val = int $val / 36;
  }
  return $b36 || '0';
}

<强>输出

FR5HUGNF