Обработка и работа с двоичными данными HEX с python
Я пытаюсь сравнить некоторые байтовые значения - источник A взят из файла, который "читается":
f = open(fname, "rb")
f_data = f.read()
f.close()
Эти файлы могут быть размером от нескольких килобайт до нескольких мегабайт.
Источник B - это словарь известных шаблонов:
eof_markers = {
'jpg':b'\xff\xd9',
'pdf':b'\x25\x25\x45\x4f\x46',
}
(Этот список будет расширен, как только базовый процесс заработает)
По сути, я пытаюсь «прочитать» файл (источник A), а затем постепенно проверять последний байт на соответствие списку шаблоновtestString = f_data[-counter:]
Если совпадений не найдено, счетчик должен увеличиться на 1, и снова попытаться сопоставить шаблон со списком.
Я пробовал несколько разных способов заставить это работать, я могу заставить testString корректно увеличиваться, но я продолжаю сталкиваться с проблемой кодирования, где различные подходы хотят ASCIIify байт для проведения сравнения.
Я немного растерялся и не первый раз бродил по смене кодаint
вu
вb
и не получать прошлые проблемы, такие какd9
будучи зарезервированным значением и, следовательно, не в состоянии использовать инструменты сравнения типов ASCII, например,if format_type in testString:
(приводит кUnicodeDecodeError: 'ascii' codec can't decode byte a9
Я пытался преобразовать все в целое число, но это выдает эту ошибку:ValueError: invalid literal for int() with base 2: '.'
или жеValueError: invalid literal for int() with base 10: '.'
Я пытался преобразоватьtestString
зашифровать байты, но продолжал получатьTypeError: hex() argument can't be converted to hex
(это скорее мое непонимание, чем все остальное, в чем я уверен! ....)
Я обнаружил ряд ресурсов, которые говорят о кодировании / шестнадцатеричном сравнении, например, Стек дорожка.
Я уже давно застрял на этом, поэтому любые указатели принимаются с благодарностью.