Поскольку ваш ответ немного запутан, я использую в качестве примера строку: "1011001010111"
.
Это код для записи строки в двоичный файл.
import struct
bits = "1011001010111"
int_value = int(bits,2) # Convert the string to integer with base 2
bin_array = struct.pack('>i', int_value) # Pack the int value using a big-endian integer
with open("test.bnr", "wb") as f: # open the file in binary write mode
f.write(bin_array) # write to the file
Согласнов документации модуля struct
вы можете увидеть, что вам нужен > с i .
У вас есть два разных способа выгрузить файл, используя терминал unix:
hexdump -e '2/1 "%02x"' test.bnr
Но здесь вы получите шестнадцатеричное число, а позже вам нужно его преобразовать.
Или выможете использовать этот скрипт, который читает файл и распечатывает двоичную строку.
with open('test.bnr', 'rb') as f:
for chunk in iter(lambda: f.read(32), b''):
print str(bin(int(chunk.encode('hex'),16)))[2:]
Как и следовало ожидать из вашего вопроса, используя строку "1011001010111" , вы получаете ту же строку, читая ее обратно изфайл.
Используя вторую строку ( "000111010001110100011110000111110101" ), вы получите ошибку:
'i' format requires -2147483648 <= number <= 2147483647
Это потому, что опция 'i' неверна дляэтот номер.Преобразовав это значение в int, вы получите 7815160309 .Число слишком большое для целого числа.
Здесь вам нужно использовать '> Q' или '> q'.