I have a very hard time handling bitswapping in python3.
So far I found fast bitswapping algorithms in C here and here, but I wasn't able to properly translate that into python3, because handling the data, using the correct data types and not getting confused by different encodings was impossible for me.
The only solution, that worked for me was using BitArray to do the swapping like this:
with open(file_swapped, 'wb') as out, open(file, 'rb') as inp:
byte_in = inp.read(1)
while byte_in:
tmp = bitstring.BitArray(byte_in)
tmp.reverse()
byte_out = tmp._getbytes()
byte_in = inp.read(1)
However this algorithm takes more than 2 Minutes to process the data that needs to be bitswapped. Profiling of this algorithm showed, that the creation of an BitArray takes most of the total time.
Every attempt to convert the binary input data to strings of '0' and '1' or integers, to do the "swapping"-part manually, failed, because the data has no specific encoding (utf-8 / utf-16 didn't work)
Here is an example of my Input Data
Does anyone know a fast way, to do the task described above?
You could try something like the following approach. This uses Python's bytes.maketrans()
and translate()
functions.
def reverse_bits(x):
return (int('{:08b}'.format(x)[::-1], 2))
reverse_table = bytes.maketrans(bytes(range(0,256)), bytes(reverse_bits(x) for x in range(0, 256)))
with open('input.txt', 'rb') as f_input, open('output.txt', 'wb') as f_output:
data = f_input.read()
f_output.write(data.translate(reverse_table))
This first creates a translate table and then applies it at once to the contents of the whole input file.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With