基数変換のための関数を書いてみた。
- nencode:10進数からN進数へ変換
- ndecode: N進数から10新数へ変換
ソースコード
nencode, ndecodeともに、第1引数が変換対象の値で、第2引数が変換に使うテーブル。デフォルト引数にalnum(英数字62文字)が設定されている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | alnum = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJELMNOPQRSTUVWXYZ" def nencode(num, chars = alnum): str = "" while num != 0: str = chars[num % len(chars)] + str num = num - num % len(chars) num = num / len(chars) return str def ndecode(str, chars = alnum): num = 0 for char in str: num = num * len(chars) num = num + chars.index(char) return num |
使用例
10進数の値は整数として、それ以外の進数は文字列として扱う。ndecodeとnencodeを組み合わせるとN進数からM進数に変換できる。
1 2 3 4 5 6 7 8 9 10 | >>> nencode(100000) 'q0U' >>> ndecode("q0U") 100000 >>> nencode(100, "01") '1100100' >>> ndecode("1100100", "01") 100 >>> nencode(ndecode("ABC"),"01") #62進数から2進数に変換 '100010010110101100' |