JAMADAM.COM

RSS Subscribe to my RSS feed

Stripe Calendar

Sep, 2010
Aug 1213141516171819202122232425262728293031 Sep 123456

Entry: 開発小ネタその2(改)

開発小ネタその2(改)

Initial post: 2009.10.14 | Last modified: 2009.10.14

開発小ネタ集その2のネタ、なんか違和感あると思ったらゼロがなかったんだ。という訳で書き直した。66進数。縮.jpは差し詰め、1945進数か。

use strict;
use warnings;

### 文字リスト
our @ascii = qw(
    0 1 2 3 4 5 6 7 8 9
    a b c d e f g h i j k l m n o p q r s t u v w x y z
    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    _ + - =
);

my $num1 = str2num("0");     ### 0
my $num2 = str2num("=");     ### 65
my $num3 = str2num("10");    ### 66
my $num4 = str2num("A359");  ### 10363263
my $str = num2str(10363263); ### A359

### --------------
### 文字列を数値に変換
### --------------
sub str2num {

    my $num = 0;
    my @id_array = split(//, $_[0]);
    @id_array = reverse(@id_array);

    for (my $i = 0; $i < scalar @id_array; $i++) {
        for (my $j = 0; $j < scalar @ascii; $j++) {
            if ($ascii[$j] eq $id_array[$i]) {
                $num += (scalar @ascii ** $i) * $j;
                last;
            }
            if ($j == scalar @ascii - 1) {
                return;
            }
        }
    }

    return $num;
}

### --------------
### 数値を文字列に変換
### --------------
sub num2str {

    my $sho     = int($_[0] / scalar @ascii);
    my $upper   = ($sho > 0) ? &num2str($sho) : "";
    my $current = $ascii[($_[0] % scalar @ascii)];
    return $upper. $current;
}