Как преобразовать строку в двоичные данные (EDID) в Python
В настоящее время я пишу сценарий EDID, чтобы иметь возможность выбирать собственные разрешения в моем Fedora25
Я нашел этот скрипт для генерации различных решений. Я смог использовать это как "шаблон", и мой скрипт на python отлично работает, генерируя расширения CEA. Теперь я хочу объединить "Голову" и мои BLOB-объекты с помощью сайта заказа байтов EDID в Википедии.
Но в GitHub Skript это (end1-start1) смущает меня:
Descriptor2:
start1: .ascii "Linux #0"
end1: .byte 0x0a /* End marker */
.fill 12-(end1-start1), 1, 0x20 /* Padded spaces */
Как я могу сделать "Linux #0" - 10
? (0x0a = 10) Когда я конвертирую "Linux #0", я получаю 76 105 110 117 120 32 35 48
что не имеет смысла с 18 байтами для дескриптора?
1 ответ
В ассемблере токены в начале строк относятся к адресам. start1
это адрес, где строка "Linux #0"
начинается, end1
это адрес, где байт 0x0a
начинается (или находится, потому что это один байт). Семестр (end1-start1)
относится к разнице адресов. Поскольку ассемблер помещает вещи сразу после друг друга в память, это длина строки "Linux #0"
т.е. 8.
Семестр 12 - (end1-start1)
затем число байтов заполнения, необходимое для заполнения объекта до 12 байтов. Затем они размещаются за .byte
0x0a
(.fill
редактировать с пробелами (0x20
)).