У меня есть строка ANSI Ď–ór˙rXüď\ő‡íQl7
, и мне нужно преобразовать ее в шестнадцатеричный: 06cf96f30a7258fcef5cf587ed51156c37
(преобразованный с XVI32).Как преобразовать строку байта с непечатаемыми символами в шестнадцатеричный в python?
Проблема заключается в том, что Python не может правильно кодировать все символы (некоторые из них отображаются неправильно даже здесь, при переполнении стека), поэтому мне приходится иметь дело с ними с байтовой строкой.
Так выше строка в байтах этого: b'\x06\xcf\x96\xf3\nr\x83\xffrX\xfc\xef\\\xf5\x87\xedQ\x15l7'
И это то, что мне нужно преобразовать в шестнадцатеричное.
До сих пор я пытался binascii без успеха, я попытался это:
h = ""
for i in b'\x06\xcf\x96\xf3\nr\x83\xffrX\xfc\xef\\\xf5\x87\xedQ\x15l7':
h += hex(i)
print(h)
Он печатает:
0x60xcf0x960xf30xa0x720x830xff0x720x580xfc0xef0x5c0xf50x870xed0x510x150x6c0x37
Хорошо. Похоже, я куда-то ... но что случилось с 0x
?
Когда я удалить 0x из строки, как это:
h.replace("0x", "")
я 6cf96f3a7283ff7258fcef5cf587ed51156c37
, который выглядит, как это правильно.
Но иногда строка байтов имеет 0
рядом с x
и удаляется из строки, что приводит к неправильной шестнадцатеричной строке. (в приведенной выше строке отсутствует 0 в начале).
Любые идеи?
Ничего себе, я не знаю, что. Это здорово, спасибо! – poke
и в обратном порядке: 'h = bytes.fromhex ('06cf96f30a7283ff7258fcef5cf587ed51156c37')'. – jfs
На Python 2 вы можете использовать 'h.encode ('hex')'. – jfs