Как превратить последовательность нулей и единиц в байты Python, Micropython
в продолжение этого вопроса. исходная задача: вывести на OLED экран через микроконтроллер изображение в формате .pbm изображение бывает двух форматов P1 и P4.
если выполнить такой код
with open('arrows.pbm', 'rb') as f:
print(f.read())
мы получим, примерно, такие результаты:
b'P4\n# Created by GIMP version 2.10.20 PNM plug-in\n7 7\n\x108|\xfe888'
или
b'P1\n# Created by GIMP version 2.10.20 PNM plug-in\n7 7\n0001000001110001111101111111001110000111000011100
обычно предлагается читать построково и требовать P4. но этажыж ниинтересна
def read_pbm_img (path, img_name):
with open(path+img_name) as f:
# превращаем файл в список из строк
data_list = f.readlines()
# третьей строкой всегда идут ширина и высота изображения. запоминаем
[width, hight] = (data_list[2].split())
# проверяем принадлежность к синим или зеленым
if data_list[0] == "P4\n":
data = bytearray(data_list[3])
return framebuf.FrameBuffer(data, int(width), int(hight), framebuf.MONO_HLSB)
elif:
data_list[0] == "P1\n":
# склеиваем оставшиеся строки в одну, попутно, убирая перенос каретки
body = ''
body += body.join(data_list[3:]).replace('\n', '')
return framebuf.FrameBuffer(body, int(width), int(hight), framebuf.MONO_HLSB)
else:
print('первая строчка ваще не от этого файла,try except и всё такое')
легко догадаться что второй вариант выдает на экране дичь. вот как перфокарту конвертировать обратно в байты. попытки прикрутить bit_lenth и to_bytes, мягко говоря, успехом не увенчались