Представление байтов Python

Я пишу шестнадцатеричный просмотрщик на питоне для проверки необработанных байтов пакетов. Я использую модуль dpkt.

Я предположил, что один шестнадцатеричный байт может иметь значение от 0x00 до 0xFF. Однако я заметил, что представление python bytes выглядит по-другому:

b'\x8a\n\x1e+\x1f\x84V\xf2\xca$\xb1'

Я не понимаю, что означают эти символы. Как я могу преобразовать эти символы в исходные 1-байтовые значения, которые можно было бы отобразить в шестнадцатеричном просмотрщике?


person poulix    schedule 07.10.2018    source источник


Ответы (1)


\xhh указывает на шестнадцатеричное значение hh. то есть это способ Python 3 кодирования 0xhh.

См. https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals

Буква b в начале строки означает, что переменные должны иметь тип bytes, а не str. Приведенная выше ссылка также охватывает это. \n — это символ новой строки.

Вы можете использовать bytearray для хранения и доступа к данным. Вот пример использования строки байтов в вашем вопросе.

example_bytes = b'\x8a\n\x1e+\x1f\x84V\xf2\xca$\xb1'
encoded_array = bytearray(example_bytes)
print(encoded_array)
>>> bytearray(b'\x8a\n\x1e+\x1f\x84V\xf2\xca$\xb1')
# Print the value of \x8a which is 138 in decimal.
print(encoded_array[0])
>>> 138
# Encode value as Hex.
print(hex(encoded_array[0]))
>>> 0x8a

Надеюсь это поможет.

person Andrew McDowell    schedule 07.10.2018
comment
Хорошо, как я могу декодировать эту закодированную в Python последовательность в массив шестнадцатеричных байтов, содержащих значения в диапазоне [0x00 - 0xFF]? Я хочу получить побайтовое представление пакета. Что-то вроде вида HxD. - person poulix; 07.10.2018
comment
Я не использовал HxD, поэтому не уверен, что именно вам нужно, но вы можете использовать класс bytearray для хранения и доступа к последовательности. Я отредактирую свой ответ с некоторым примером кода. - person Andrew McDowell; 07.10.2018