Я предполагаю, что это может быть связано со схемой кодирования, используемой python?
Не существует "схемы кодирования" hexdump форматирует двоичные данные как шестнадцатеричные (два полубайта на байт ), вы преобразовали двоичное содержимое файла в список, который выдает список целых чисел (поскольку это то, что байты находятся в python).
Если вы хотите преобразовать байты в печатаемый шестнадцатеричный код в Python, используйте метод bytes.hex. Если вам нужно что-то похожее на hexdump, вам нужно позаботиться о нарезке, пробелах и возврате каретки.
Медленная версия просто прочитает файл 2 байта на 2 байта, зашифрует их, напечатает их, затем перевод строки через каждые 16 байтов. Python 3.8 добавляет средства форматирования в bytes.hex (), что означает, что вы можете еще легче читать байты 16 на 16 с разделителем каждые два, хотя это не совсем соответствует формату hexdump:
f = open(sys.argv[1], 'rb')
it = iter(functools.partial(f.read, 16), '')
for i, b in enumerate(it):
print(f'{16*i:07x} {b.hex(" ", 2)}')
Также имейте в виду, что hexdump
следует по умолчанию порядку байтов платформы, который ... редко бывает тем, что вы хотите, и не будет соответствовать вашему выводу Python. hexdump -C
печатает байты в порядке файлов.