4

可能重复:
在 Perl 中进行 base36 算术的最佳方法是什么?

您好,是否可以使用 perl 脚本将数字从 base-10 转换为 base-36 ?

这是一个例子:

base 10 - 1234567890123 and outcome
base 36 - FR5HUGNF
4

3 回答 3

4

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

于 2012-10-10T14:59:35.243 回答
3

查看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 );
}
于 2012-10-10T15:10:16.610 回答
1

编写一个子程序来执行此操作非常简单。下面的代码不进行值检查,并假定要转换的数字始终为非负数

如果您的 Perl 版本不足以支持state关键字,那么只需在程序开头声明$symbols为变量my

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
于 2012-10-10T16:15:23.307 回答