Почему 5D в шестнадцатеричном формате представлен как bytearray(b’]’)?

#python #python-3.x #byte #ascii

#питон #python-3.x #байт #ASCII

Вопрос:

Например , если вы представляете 5D в bytearray, вы получаете bytearray(b']') , но я не понимаю, почему.

Это из-за ASCII, и если да, то как Python обрабатывает все символы ASCII?

Комментарии:

1. 5D hex-это 93 десятичных знака, для которых используется код ascii ] . Вот как bytearray отображает легко печатаемые символы.

2. python2 или python3? Результат будет другим.

3. Попробуйте b']' == chr(0x5d) в каждом.

4. Это потому, что x5d-это символ ] в ASCII, и это часто раздражает Python при отображении содержимого bytearray, если вы хотите, чтобы все шестнадцатеричные символы использовали что-то вроде ','.join(f'\x{b:02x}' for b in ba) .

Ответ №1:

Под капотом все двоично, верно?

5d в шестнадцатеричном формате-это просто 01011101 в двоичном формате. Оказывается, что ] в ascii то же самое, что и в двоичном 01011101 формате . Так что на самом деле у вас просто есть 01011101 или в base10 93 , представленные в шестнадцатеричном формате и Ascii.

Комментарии:

1. Таким образом, Python просто использует Ascii, где он может экономить память при печати?

2. Ничего общего с памятью, поскольку байт есть байт есть байт. Он просто использует ascii в качестве представления байта. Он также мог бы просто использовать шестнадцатеричный (или двоичный, или десятичный, или базовый 29), но по какой-то причине они решили использовать ascii. Я считаю, что вы можете использовать .hex() метод bytearray, чтобы показать его как шестнадцатеричный, если это ваше предпочтение.