#python
#python
Вопрос:
Мне было интересно, почему этот hex: bytes.fromhex("34 FF FA A3 A5")
выдает вывод : b'4xffxfaxa3xa5'
. Почему x
исчезло, не так ли x34
?
Ответ №1:
Вот как bytes
repr
работают s; когда байт имеет порядковое значение, соответствующее печатному символу ASCII, он представляется как символ ASCII, а не x
escape-код. Вы можете создать bytes
с любой формой ( b'4' == b'x34'
is True
; они выдают точно такое же bytes
значение), но он выбирает отображение ASCII, чтобы сделать байтовые строки, которые являются ASCII, более удобочитаемыми (и сделать многие repr
s короче).
Ответ №2:
Python пытается напечатать хорошо выглядящий эквивалент. В вашем случае мы имеем: '0x34'= hex(ord("4"))
, что означает, что целое число в Юникоде, представляющее 4 в шестнадцатеричном формате, равно ‘0x34’. Попробуйте это в вашей консоли: print ("x09")
. Это потому, что x09 в шестнадцатеричном формате представляет t .
Комментарии:
1. Какой-то ужасный тестовый пример; печать символа табуляции, за которым сразу следует новая строка, будет неотличима от печати только новой строки большую часть времени.
2. Он показывает, как python действует при печати строк. Дело не в неразличимости.
3.За исключением того, что вы печатаете строку, а не ее
repr
(илиrepr
bytes
объекта). Таким образом, вы на самом деле не видитеt
, вы увидите (или, точнее, не увидите) распечатанную буквенную вкладку. Проблема в том, что вы придумали демонстрацию, которая практически ничего не демонстрирует.4. В том-то и дело, что вы не видите ничего, кроме того, что было напечатано » x09″, и ожидалось, что это будет видно в консоли!
5. Хорошо, конечно, но чем это отличается от печати
'x34'
(как в примере OP) и просмотра4
? Или использование какого-либо другого печатного символа, чтобы вы знали