Преобразование строки из 1 и 0 в байтовый массив - PullRequest
4 голосов
/ 28 ноября 2008

У меня есть строка длиной, кратной 8, которая содержит только 0 и 1. Я хочу преобразовать строку в байтовый массив, подходящий для записи в файл. Например, если у меня есть строка «0010011010011101», я хочу получить байтовый массив [0x26, 0x9d], который при записи в файл даст 0x269d в виде двоичного (необработанного) содержимого.

Как я могу сделать это в Python?

Ответы [ 3 ]

5 голосов
/ 28 ноября 2008

Вы можете сделать что-то вроде этого:

>>> s = "0010011010011101"
>>> [int(s[x:x+8], 2) for x in range(0, len(s), 8)]
[38, 157]
4 голосов
/ 28 ноября 2008

Ваш вопрос показывает последовательность целых чисел, но говорит "массив байтов", а также "когда записано в файл, даст 0x269d как двоичное (необработанное) содержимое". Это три очень разные вещи. Я думаю, что вы переоценили. Из ваших различных комментариев видно, что вы хотите только вывод файла, а остальные описания не соответствуют вашим ожиданиям.

Если вам нужна последовательность целых чисел, посмотрите на ответ Грега Хьюгилла.

Если вам нужна последовательность байтов (как в строке), которая может быть записана в файл, посмотрите ответ Martin v. Löwis.

Если вам нужен массив байтов, вы должны сделать это.

import array
intList= [int(s[x:x+8], 2) for x in range(0, len(s), 8)]
byteArray= array.array('B', intList)
4 голосов
/ 28 ноября 2008
py> data = "0010011010011101"
py> data = [data[8*i:8*(i+1)] for i in range(len(data)/8)]
py> data
['00100110', '10011101']
py> data = [int(i, 2) for i in data]
py> data
[38, 157]
py> data = ''.join(chr(i) for i in data)
py> data
'&\x9d'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...