47 lines
897 B
Python
47 lines
897 B
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 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])
|