ランレングス解凍

解凍ルーチンです。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import binascii

class Writer:
	def __init__(self, filepath):
		self.f = file(filepath, "wb")
	def putByte(self, b):
		self.f.write("%c"%b)

class Reader:
	def __init__(self, filepath):
		self.f = file(filepath, "rb")
		self.eof = False
	def read(self):
		b = self.f.read(1)
		if b == "":
			self.eof = True
		return b

def binToInt(b):
	return int(
		binascii.b2a_hex(b),
		16)

def main():
	reader = Reader("dst.bin") # 圧縮データ
	writer = Writer("src.bin") # 解凍データ

	b = reader.read()
	while not(reader.eof):
		count = binToInt(b)
		b = reader.read()
		for i in range(count):
			writer.putByte(b)
		b = reader.read()

	print "decompression done."

if __name__ == "__main__":
	main()