base91_2.py 621 B

123456789101112131415161718192021222324
  1. def encode(bindata):
  2. ''' Encode a bytearray to a Base91 string '''
  3. l = len(bindata)
  4. b = 0
  5. n = 0
  6. out = ''
  7. for byte in bindata:
  8. b |= struct.unpack('B', byte)[0] << n
  9. n += 8
  10. if n>13:
  11. v = b & 8191
  12. if v > 88:
  13. b >>= 13
  14. n -= 13
  15. else:
  16. v = b & 16383
  17. b >>= 14
  18. n -= 14
  19. out += base91_alphabet[v % 91] + base91_alphabet[v / 91]
  20. if n:
  21. out += base91_alphabet[b % 91]
  22. if n>7 or b>90:
  23. out += base91_alphabet[b / 91]
  24. return out