68 lines
No EOL
1.3 KiB
Python
68 lines
No EOL
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]) |