Представление шестнадцатеричных и восьмеричных чисел для типа байтов в Python3 - PullRequest
0 голосов
/ 30 января 2020

У меня есть вопрос относительно типа байтов в Python 3, который я вполне могу понять.

Например:

Когда я пишу следующее:

>>> a = b'\xff\x10'

>>> a[0]                      # It's understandable that the first byte( 8 bits = 0xff in hex ) gives the decimal equivalent 255

255

>>> a[1]                      # Same goes here as well. hex value 10 = 16 in decimal

16
  1. Вот сложная часть. Или я могу просто неправильно это понять. Когда я пишу байты, как показано ниже:

    a = b'1102 '

    a [0]

    49 # Это значение ASCII 1

    a [1]

    49 # Это значение ASCII равно 1

    a [2]

    48 # Это значение ASCII равно 0

    a [3]

    50 # Это значение ASCII 2

Разве вышеприведенный вывод не должен быть десятичным эквивалентом, каким был вывод шестнадцатеричных байтов? Или просто укажите односимвольное значение ASCII при индексировании .?

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

a = b '\ o07 \ o10 '

a [0]

92 # Это значение ASCII (back-sla sh)

a [1]

111 # Это значение ASCII o

a [2]

48 # Это значение ASCII 0

a [3]

55 # Это значение ASCII 7

a [4]

92 # Это значение ASCII \

a [5]

111 # Это значение ASCII o

a [6]

49 # Это значение ASCII 1

a [7]

48 # Это Значение ASCII 0

Попробовал и это.

>>> a = b'\b1\b1\b0\b2'

>>> a[0]

8                                 # This is the ASCII value of \b which is backspace

>>> a[1]

49                                 # This is the ASCII value of 1

>>> a[2]

8                                 # This is the ASCII value of 1

>>> a[3]

49                                 # This is the ASCII value of 1

>>> a[4]

8                                 # This is the ASCII value of \b which is backspace

>>> a[5]

48                                 # This is the ASCII value of 0

>>> a[6]

8                                 # This is the ASCII value of \b which is backspace

>>> a[7]

50                                 # This is the ASCII value of 2

Другими словами, возможно ли представлять двоичные, восьмеричные значения в байтовом типе. Или Только шестнадцатеричные значения могут быть представлены в байтовом типе, поскольку каждое шестнадцатеричное значение составляет 4 бита, а 2 шестнадцатеричных значения составляют байт .?

Мой вывод состоит в том, что приведенное ниже недопустимо, и могут быть декодированы только шестнадцатеричные эквиваленты. в десятичное значение при индексировании.

\ b и \ o в b '\ b1 \ b1 \ b0 \ b2' и b '\ o07 \ o10' не дает десятичного эквивалента

Дайте мне знать ваши мысли и ответы.

Кроме того, почему

>>> a = b'\x09'
>>> a
b'\t'   # Horizontal tab I guess, but what about \n . Is it a = b'\x0A'?
>>> a[0]
9

Спасибо

...