基数変換

水曜日, 2月 2nd, 2011 by

基数変換のための関数を書いてみた。

  • 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'

Facebook comments:

comments

Leave a Reply


Get Adobe Flash player
single