Skip to content

Instantly share code, notes, and snippets.

@jg75
Last active April 1, 2016 18:11
Show Gist options
  • Save jg75/5d92dfdffdd3a2c749cf to your computer and use it in GitHub Desktop.
Save jg75/5d92dfdffdd3a2c749cf to your computer and use it in GitHub Desktop.
from math import log
def is_valid_number(number, base):
for i in reversed(range(int(log(number, 10)) + 1)):
digit = number / 10 ** i
number -= digit * 10 ** i
if digit >= base:
return False
return True
def convert(number, source_base=10, target_base=10, validate=True):
if number == 0:
return number
if validate:
if source_base < 2 or source_base > 10:
raise ValueError("Invalid base: %s" % source_base)
if target_base < 2 or target_base > 10:
raise ValueError("Invalid base: %s" % target_base)
if not is_valid_number(number, source_base):
raise ValueError("Not a base %s number" % source_base)
if source_base == target_base:
return number
exponent = int(log(number, target_base))
most_significant_bit = source_base ** exponent
number -= target_base ** exponent
return most_significant_bit + convert(
number,
source_base,
target_base,
validate=False
)
if __name__ == '__main__':
print(convert(0x2a, 10, 2))
print(convert(101010, 2, 10))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment