A little optimization for table encoding
This commit is contained in:
parent
52c6c95050
commit
afa417d251
21
huffman.py
21
huffman.py
@ -62,14 +62,7 @@ def shichiro_encode(table):
|
|||||||
for i in range(len(table)):
|
for i in range(len(table)):
|
||||||
if i % 2:
|
if i % 2:
|
||||||
code = table[i]
|
code = table[i]
|
||||||
bitlen = bin(len(code))[2:]
|
bits += bin(len(code))[2:].rjust(8,'0')
|
||||||
if len(bitlen) > 7:
|
|
||||||
while len(bitlen) > 7:
|
|
||||||
bits += '1' + bitlen[:7]
|
|
||||||
bitlen = bitlen[7:]
|
|
||||||
bits += bitlen.rjust(8, '0') + bin(len(bitlen))[2:].rjust(8, '0')
|
|
||||||
else:
|
|
||||||
bits += bitlen.rjust(8, '0')
|
|
||||||
bits += code
|
bits += code
|
||||||
else:
|
else:
|
||||||
bits += bin(int(table[i]))[2:].rjust(8, '0')
|
bits += bin(int(table[i]))[2:].rjust(8, '0')
|
||||||
@ -90,16 +83,8 @@ def shichiro_decode(byts):
|
|||||||
i += 8
|
i += 8
|
||||||
c += 1
|
c += 1
|
||||||
continue
|
continue
|
||||||
bitlen = ''
|
bitlen = int(bits[i:i+8], 2)
|
||||||
if bits[i] == '0':
|
i += 8
|
||||||
bitlen = int(bits[i:i+8], 2)
|
|
||||||
i += 8
|
|
||||||
else:
|
|
||||||
while bits[i] == '1':
|
|
||||||
bitlen += bits[i+1:i+8]
|
|
||||||
i += 8
|
|
||||||
bitlen = int(bitlen + bits[i+8-int(bits[i+8:i+16], 2):i+8], 2)
|
|
||||||
i += 16
|
|
||||||
dec.append(bits[i:i+bitlen])
|
dec.append(bits[i:i+bitlen])
|
||||||
i += bitlen
|
i += bitlen
|
||||||
c += 1
|
c += 1
|
||||||
|
|||||||
Reference in New Issue
Block a user