Измените строку на двоичную, затем запишите ее в файл - PullRequest
0 голосов
/ 02 марта 2019

В настоящее время мне нужно записать двоичную строку в файл - однако мне нужно записать ее в двоичном виде.Например мне дана строка s = "1011001010111".Я хочу иметь возможность записать это в файл в двоичном формате.Таким образом, в результате файл при шестнадцатеричном формате будет иметь двоичный вывод: 1011001010111. Я думал об итерации по моей строке s символ за символом, чтобы получить какое значение бита, однако у меня возникают проблемы с записью его в двоичном формате вфайл.

Редактировать: мой код

bits2 = "000111010001110100011110000111110101"
int_value = int(bits[1::], base=2)
bin_array = struct.pack('i', int_value)
f = open("test.bnr", "wb")
f.write(bin_array)

1 Ответ

0 голосов
/ 02 марта 2019

Поскольку ваш ответ немного запутан, я использую в качестве примера строку: "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'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...