# Python Convert To/From Number Bases Between 2 and 62

Needed a func to convert base 2 into 10, and back. Found the referenced code in this func for moving between three bases, and generalized it to between bases 2 and 62, and all in between.

Upconvert a number, then down convert, then upconvert again. Go wild, have fun.

541 Views
About the Author

Science and Math Researcher (For Fun)

``````# Imports #
from __future__ import print_function

# Main #
def main():
# Variables - Local

# Main Code
print(f_NumBaseConvert(257938572394,10,62)) ## 4XYBxik

#-----------Basement------------

# Functions #
# Normal Functions
def f_NumBaseConvert(v_Num, v_BaseFrom, v_BaseTo):
"""&&Syntax: INT or STR(for non base-10); Returns new num. as STR;
Desc.: Converts a INT or STR "number" between two bases, up to base-62, of arbitrary digits.
Ref.: https://code.activestate.com/recipes/111286/
Test: print(f_NumBaseConvert(257938572394,10,62)) ## 4XYBxik"""
# Set Digit Palette
BASE62 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
v_DigitPaletteFrom = BASE62[0:v_BaseFrom] ## Init the digit palette for the from num.
v_DigitPaletteTo = BASE62[0:v_BaseTo] ## Init the digit palette for the to num.

# Convert a Negative to a Positive
v_Negative = 0 ## Init to 0 v_Negative memo
if str(v_Num)=='-': ## If has a neg. sign in front.
v_Num = str(v_Num)[1:] ## Use rest of v_Num after neg. sign.
v_Negative = 1 ## Activate v_Negative memo

# Create a Working INT From the Number
v_WorkingINT = long(0) ## Init v_WorkingINT as long INT
for digit in str(v_Num):
v_WorkingINT = v_WorkingINT * len(v_DigitPaletteFrom) + v_DigitPaletteFrom.index(digit) ## Uses to increment place values as builds v_WorkingINT

# Create New Num in Desired Base
v_ResultNum =""
while v_WorkingINT > 0:
digit = v_WorkingINT % len(v_DigitPaletteTo) ## Remainder of is digit pointer
v_ResultNum = v_DigitPaletteTo[digit] + v_ResultNum ## Conc. the new digit to the result
v_WorkingINT /= len(v_DigitPaletteTo) ## Assign to v_WorkingINT the qoutient of div with len of v_DigitPaltetteTo

# Replace the Neg. Sign to the Front of New Num If Needed
if v_Negative:
v_ResultNum = "-" + v_ResultNum

return v_ResultNum

# Main Loop #
if __name__ == '__main__':
main()``````