Advertisement
Guest User

Untitled

a guest
Jan 15th, 2014
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.05 KB | None | 0 0
  1. import sys, struct
  2.  
  3. def main():
  4. f = open(sys.argv[1], "rb")
  5.  
  6. symbols = []
  7. for c in xrange(256):
  8. n = struct.unpack(">L", "\x00" + f.read(3))[0]
  9. if n == 0:
  10. continue
  11.  
  12. symbols.append((n, chr(c), None, None))
  13.  
  14. symbols = sorted(symbols)
  15.  
  16. while len(symbols) > 1:
  17. a = symbols[0]
  18. b = symbols[1]
  19. newsymb = (a[0] + b[0], a[1] + b[1], a, b)
  20.  
  21. symbols = symbols[2:]
  22. symbols.append(newsymb)
  23. symbols = sorted(symbols)
  24.  
  25. of = open(sys.argv[1] + ".disenchanted", "wb")
  26. root = symbols[0]
  27. node = root
  28. while True:
  29. c = f.read(1)
  30. if len(c) == 0:
  31. break
  32. for i in xrange(8):
  33. bit = (ord(c) >> (7-i)) & 1
  34.  
  35. if bit == 0:
  36. node = node[2]
  37. else:
  38. node = node[3]
  39.  
  40. if node[2] is None:
  41. of.write(node[1])
  42. node = root
  43.  
  44. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement