Hat man sich erst einmal darauf geeinigt, dass man einfach so weitermacht wie bei den hexadezimalen Ziffern, ist der Rest nicht mehr schwer, weil die Basen nur an wenigen Stellen eine Rolle spielen:
import string def anyToInt(digitStr, base=16): res = 0 for digit in digitStr: res *= base if digit in string.digits: res += int(digit) elif digit in string.ascii_lowercase: res += ord(digit)-ord('a')+10 elif digit in string.ascii_uppercase: res += ord(digit)-ord('A')+10 return res def intToAny(number, base=16): digits = string.digits+string.lowercase res = [] while number>0: curRem = number%base res.append(string.hexdigits[curRem]) number /= base res.reverse() return "".join(res)
In dieser Fassung wandeln die Funktionen auch mühelos nach binär. Probiert mal aus, wie die Zweierpotenzen aussehen, die um eins reduzierten Zweierpotenzen usf. Wie sehen die Zweierpotenzen Hexadezimal aus, wie Oktal (also zur Basis 8)? Wie verhält sich die Zahl der Stellen einer Zahl zur Basis 32 zu der Zahl der Stellen zur Basis 16?
Übrigens wäre die schnelle Lösung für anyToInt gewesen:
anyToInt = int
Warum, bekommt ihr mit pydoc int heraus. Eine in Python eingebaute Funktion, die die Umkehrung davon macht, ist mir nicht bekannt.