Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """bitencoder and bitdecoder by Nick Ku"""
- def number_to_character( number ):
- if number < 10:
- return chr( number + 48)
- elif 10 <= number <= 35:
- return chr( number + 55 )
- elif 35 < number <= 61:
- return chr( number + 61 )
- elif number == 62:
- return chr( 45 )
- elif number == 63:
- return chr( 43 )
- else:
- print ('Invalid number')
- def character_to_number( character ):
- number = ord( character )
- if 48 <= number <= 57:
- return number-48
- elif 65 <= number <= 90:
- return number - 55
- elif 97 <= number <= 122:
- return number - 61
- elif number == 45:
- return 62
- elif number == 43:
- return 63
- else:
- print ('Invalid character')
- def encode( number ):
- new_number = ""
- if number < 0:
- print ('Negative numbers are invalid')
- while number !=0:
- remainder = number % 64
- new_number += number_to_character(remainder)
- number //= 64
- while len(new_number) < 6:
- new_number += '0'
- new_number = new_number[:6]
- return new_number
- def decode( number ):
- result = 0
- exponent = 0
- for item in number:
- result += character_to_number(item) * (64**exponent)
- exponent += 1
- return result
- def bitencode( number, bits = [ 5, 11, 17, 23, 29, 35, 4, 10, 16, 22, 28, 34, 3, 9, 15, 21, 27, 33, 2,
- 8, 14, 20, 26, 32, 1, 7, 13, 19, 25, 31, 0, 6, 12, 18, 24, 30,]):
- bit_shift = bits[::-1]
- new_number = 0
- order = 0
- for x in bit_shift:
- new_number += (((number >> x) & 1) << order)
- order +=1
- return encode(new_number)
- def bitdecode( number, bits = [ 5, 11, 17, 23, 29, 35, 4, 10, 16, 22, 28, 34, 3, 9, 15, 21, 27, 33, 2,
- 8, 14, 20, 26, 32, 1, 7, 13, 19, 25, 31, 0, 6, 12, 18, 24, 30,]):
- bit_shift = bits[::-1]
- new_number = 0
- old_number = decode(number)
- order = 0
- for x in bit_shift:
- new_number += (((old_number >> order) & 1) << x)
- order += 1
- return new_number
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement