Как преобразовать строку в двоичные данные (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 байтов. Затем они размещаются за .byte0x0a (.fillредактировать с пробелами (0x20)).

Другие вопросы по тегам