Perl模块将数字转换为字母表示法

Jef*_*Ray 5 perl perl-module

是否有perl模块将数字转换为字母,反之亦然?

例如

1 = A 
2 = B
3 = C
...
27 = AA
28 = AB
29 = AC
...
53 = BA
54 = BB
55 = BC
Run Code Online (Sandbox Code Playgroud)

等等等等.

Bor*_*din 9

此代码显示了一个能够a2n满足您需求的功能

use strict;
use warnings;

printf "%2s = %d\n", $_, a2n($_) for qw/ A B C AA AB AC BA BB BC /;

sub a2n {
  my $n = 0;
  $n = $n * 26 + $_ for map { ord($_) & 0x1F } split //, shift;
  $n;
}
Run Code Online (Sandbox Code Playgroud)

产量

 A = 1
 B = 2
 C = 3
AA = 27
AB = 28
AC = 29
BA = 53
BB = 54
BC = 55
Run Code Online (Sandbox Code Playgroud)

相应的n2a看起来像这样

sub n2a {
  my ($n) = @_;
  my @a;
  while ($n > 0) {
    unshift @a, ($n-1) % 26;
    $n = int(($n-1)/26); #Edited for failing corner case
  }
  join '', map chr(ord('A') + $_), @a;
}
Run Code Online (Sandbox Code Playgroud)


TLP*_*TLP 6

好吧,Perl可以处理范围内的字母,这可能符合您的需求:

my @letters = 'A' .. 'BC'; # A B C ... Z AA AB AC etc.
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地做:

my $letter = $letter[$foo - 1];   # 1 -> A, 2 -> B ...
Run Code Online (Sandbox Code Playgroud)