2014-10-25 3 views
2

В Python (3) по крайней мере, если двоичное значение имеет представление ASCII, оно отображается вместо шестнадцатеричного значения. Например, двоичное значение 67 который является ASCII-C этого шоу следующим образом:Показать шестнадцатеричное значение для всех байтов, даже если присутствуют символы ASCII

bytes([67]) # b'C' 

В то время как для двоичных значений без ASCII представлений, они показаны в шестнадцатеричном формате. И.Е.

b'\x0f' 

Есть ли способ заставить Python, чтобы показать двоичные значения в их двоичных шестнадцатиричной форме (если это то, что она называется), даже если есть ASCII представление?

Редактировать: Под этим я подразумеваю, что-то, что начинается с b'\x',. Это облегчило бы отладку, если вы ищете конкретные байты, которые будут напечатаны, например.

Благодаря

+1

@BrenBarn Я не думаю, что это дубликат этого вопроса. Этот вопрос задает вопрос о том, как получить шестнадцатеричное значение как репрез (или какое-то другое строковое преобразование), в то время как другой вопрос/ответ в основном предполагает разницу и решает их эквивалентность. – user2864740

+0

@ user2864740: Ответ, однако, включает в себя способ отображения шестнадцатеричных значений всех байтов. – BrenBarn

+1

Я видел этот вопрос, но думал о том же. В этом вопросе принятый ответ хорошо объясняет, что они одинаковы и почему они печатаются по-разному, но не объясняют, как существенно «отключить» форматирование ASCII в редакторе. Я знаю, что они одинаковые, но во время отладки сложнее постоянно конвертировать. Даже использование '.encode ('hex')' в качестве упомянутого ответа не форматирует символы одинаково (т.е. префикс их с помощью '\ x' – Startec

ответ

1

Там нет конкретных средств требует какого-либо конкретного форматирования (например, \x) для строки байтов. Если вам действительно нужно определенное форматирование, вы можете использовать что-то вроде решения .hex() от this question, но оберните его другим кодом, чтобы вставить нужное форматирование. Другим полезным инструментом является встроенная функция hex. Например, если вы хотите \x:

>>> x = bytes([67, 128]) 
>>> print(''.join(r'\x'+hex(letter)[2:] for letter in x)) 
\x43\x80 

Если вам просто нужно, чтобы иметь возможность визуально отличить байты, используя hex само по себе может работать для вас (он использует 0x вместо \x):

>>> print(''.join(hex(letter) for letter in x)) 
0x430x80 

Не существует способа сделать это поведение по умолчанию для байтовых строк. Что бы вы ни делали, вам придется писать код, который определяет желаемый формат отображения; вы не можете заставить Python автоматически отображать печатные байты как \x экранов.

+0

Это приведет к ошибке, однако, для символов с шестнадцатеричным значением

 Смежные вопросы

  • Нет связанных вопросов^_^