rDrama/drama/helpers/base36.py

68 lines
1.3 KiB
Python

from flask import abort
def base36encode(number, alphabet='0123456789abcdefghijklmnopqrstuvwxyz'):
"""Converts an integer to a base36 string."""
if not isinstance(number, int):
raise TypeError('number must be an integer')
base36 = ''
sign = ''
if number < 0:
sign = '-'
number = -number
if 0 <= number < len(alphabet):
return sign + alphabet[number]
while number != 0:
number, i = divmod(number, len(alphabet))
base36 = alphabet[i] + base36
return sign + base36
def base36decode(number):
try:
return int(str(number), 36)
except ValueError:
abort(400)
def base_encode(number, base):
alphabet = '0123456789abcdefghijklmnopqrstuvwxyz'[0:base]
output = ''
sign = ''
if number < 0:
sign = '-'
number = -number
if 0 <= number < len(alphabet):
return sign + alphabet[number]
while number != 0:
number, i = divmod(number, len(alphabet))
output = alphabet[i] + output
return sign + output
#got this one from stackoverflow
def hex2bin(hexstr):
value = int(hexstr, 16)
bindigits = []
# Seed digit: 2**0
digit = (value % 2)
value //= 2
bindigits.append(digit)
while value > 0:
# Next power of 2**n
digit = (value % 2)
value //= 2
bindigits.append(digit)
return ''.join([str(d) for d in bindigits])