您好,是否可以使用 perl 脚本将数字从 base-10 转换为 base-36 ?
这是一个例子:
base 10 - 1234567890123 and outcome
base 36 - FR5HUGNF
您好,是否可以使用 perl 脚本将数字从 base-10 转换为 base-36 ?
这是一个例子:
base 10 - 1234567890123 and outcome
base 36 - FR5HUGNF
尝试使用Math::Base36 CPAN 库进行基本转换。
查看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 );
}
编写一个子程序来执行此操作非常简单。下面的代码不进行值检查,并假定要转换的数字始终为非负数
如果您的 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