Fix bits and bytes
This commit is contained in:
13
main.py
13
main.py
@@ -4,7 +4,7 @@ from bitarray import bitarray
|
|||||||
class BZZCompressor:
|
class BZZCompressor:
|
||||||
def decompress(self, input_file_path) -> bytes:
|
def decompress(self, input_file_path) -> bytes:
|
||||||
data = bitarray(endian="big")
|
data = bitarray(endian="big")
|
||||||
output_buffer = []
|
output_buffer = bitarray(endian="big")
|
||||||
|
|
||||||
# read the input file
|
# read the input file
|
||||||
try:
|
try:
|
||||||
@@ -137,12 +137,13 @@ class BZZCompressor:
|
|||||||
print(f"Output Buffer Size (in bits): {len(output_buffer)}")
|
print(f"Output Buffer Size (in bits): {len(output_buffer)}")
|
||||||
print(f"Distance Data: {distance_data.tobytes()}")
|
print(f"Distance Data: {distance_data.tobytes()}")
|
||||||
print(f"Displacement (in bits): {int(displacement.to01(), 2)}")
|
print(f"Displacement (in bits): {int(displacement.to01(), 2)}")
|
||||||
print(f"Length: {length}")
|
print(f"Length (in bits): {length}")
|
||||||
|
|
||||||
# Here we copy bit by bit from earlier in the output buffer.
|
# Here we copy bit by bit from earlier in the output buffer.
|
||||||
# we use this instead of index slicing since the slice could lead to
|
# we use this instead of index slicing since the slice could lead to
|
||||||
# data we are currently copying into the buffer
|
# data we are currently copying into the buffer
|
||||||
start_index = len(output_buffer) - int(displacement.to01(), 2)
|
start_index = len(output_buffer) - int(displacement.to01(), 2)
|
||||||
|
|
||||||
for i in range(length):
|
for i in range(length):
|
||||||
output_buffer.append(output_buffer[start_index + i])
|
output_buffer.append(output_buffer[start_index + i])
|
||||||
|
|
||||||
@@ -150,17 +151,15 @@ class BZZCompressor:
|
|||||||
|
|
||||||
if len(data) > 0:
|
if len(data) > 0:
|
||||||
output_buffer.append(
|
output_buffer.append(
|
||||||
bitarray(
|
bitarray(data.to01() + "0".join("" for i in range(8 - len(data))))
|
||||||
data.to01() + "0".join("" for i in range(8 - len(data)))
|
|
||||||
).tobytes()
|
|
||||||
)
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# If the file is less than 9 bits, it's just output
|
# If the file is less than 9 bits, it's just output
|
||||||
for i in data.tobytes():
|
for i in data:
|
||||||
output_buffer.append(i)
|
output_buffer.append(i)
|
||||||
|
|
||||||
out_data = b"".join(output_buffer)
|
out_data = b"".join(output_buffer.tobytes())
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if "bin_extract" in input_file_path[0:11]:
|
if "bin_extract" in input_file_path[0:11]:
|
||||||
|
Reference in New Issue
Block a user