2015-12-08 6 views
1

В python я пытаюсь преобразовать строковый литерал в шестнадцатеричный 4-байтовый эквивалент. Вот пример того, что я делаю:Python String to Hex Bytes

import struct 
struct.pack("<i", int("08050030", 16)) 
>>'0\x00\x05\x08' 

Почему визуализация вывода выглядит так? Я ожидал бы \x30\x00\x05\x08?

+3

потому что ''0' == '\ x30''. Если персонаж может быть представлен как символ ascii, он отображается как chracter вместо формы '\ xOO'. – falsetru

ответ

2

Вы, вероятно, будет удивлен, если РЕПЛ сделал это

>>> "hello" 
'\x68\x65\x6c\x6c\x6f' 

К счастью, это не так. печатные символы печатаются как сами. непечатные символы используют ярлыки, такие как '\n', и когда их нет, последнее применение - использовать шестнадцатеричную нотацию.

Это вполне приемлемо использовать шестигранную кодировку в любом месте в ваших литералах

>>> '\x30\x00\x05\x08' 
'0\x00\x05\x08' 

Это просто предпочтение Python, чтобы использовать их для отображения.