Advertisement
Cinestra

Nick Ku- Bit Encoder and Decoder

Oct 18th, 2013
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.82 KB | None | 0 0
  1. """bitencoder and bitdecoder by Nick Ku"""
  2.  
  3. def number_to_character( number ):
  4.     if number < 10:
  5.         return chr( number + 48)
  6.     elif 10 <= number <= 35:
  7.         return chr( number + 55 )
  8.     elif 35 < number <= 61:
  9.         return chr( number + 61 )
  10.     elif number == 62:
  11.         return chr( 45 )
  12.     elif number == 63:
  13.         return chr( 43 )
  14.     else:
  15.         print ('Invalid number')
  16.  
  17. def character_to_number( character ):
  18.     number = ord( character )
  19.     if 48 <= number <= 57:
  20.         return number-48
  21.     elif 65 <= number <= 90:
  22.         return number - 55
  23.     elif 97 <= number <= 122:
  24.         return number - 61
  25.     elif number == 45:
  26.         return 62
  27.     elif number == 43:
  28.         return 63
  29.     else:
  30.         print ('Invalid character')
  31.  
  32. def encode( number ):
  33.     new_number = ""
  34.     if number < 0:
  35.         print ('Negative numbers are invalid')
  36.     while number !=0:
  37.         remainder = number % 64
  38.         new_number += number_to_character(remainder)
  39.         number //= 64
  40.     while len(new_number) < 6:
  41.         new_number += '0'
  42.     new_number = new_number[:6]
  43.     return new_number
  44.  
  45. def decode( number ):
  46.     result = 0
  47.     exponent = 0
  48.     for item in number:
  49.         result += character_to_number(item) * (64**exponent)
  50.         exponent += 1
  51.     return result
  52.  
  53. def bitencode( number, bits = [ 5, 11, 17, 23, 29, 35, 4, 10, 16, 22, 28, 34, 3,  9, 15, 21, 27, 33, 2,
  54.     8, 14, 20, 26, 32, 1,  7, 13, 19, 25, 31, 0,  6, 12, 18, 24, 30,]):
  55.     bit_shift = bits[::-1]
  56.     new_number = 0
  57.     order = 0
  58.     for x in bit_shift:
  59.         new_number += (((number >> x) & 1) << order)
  60.         order +=1
  61.     return encode(new_number)
  62.  
  63. def bitdecode( number, bits = [ 5, 11, 17, 23, 29, 35, 4, 10, 16, 22, 28, 34, 3,  9, 15, 21, 27, 33, 2,
  64.     8, 14, 20, 26, 32, 1,  7, 13, 19, 25, 31, 0,  6, 12, 18, 24, 30,]):
  65.     bit_shift = bits[::-1]
  66.     new_number = 0
  67.     old_number = decode(number)
  68.     order = 0
  69.     for x in bit_shift:
  70.         new_number += (((old_number >> order) & 1) << x)
  71.         order += 1
  72.     return new_number
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement