Обработка и работа с двоичными данными 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
(это скорее мое непонимание, чем все остальное, что яя уверен! ....)
Есть ряд ресурсов, которые ямы обнаружили, что говорят о кодировании / шестнадцатеричном сравнении, например, stackoverflow.com/questions/10561923/unicodedecodeerror-ascii-codec-cant-decode-byte-0xef-in-position-1), я 'Мы просто не нашли то, что я могу полностью понять, или это указывает мне правильный путь.
Это было какое-то время яЯ застрял на этом, поэтому любые указания с благодарностью принимаются.