Байт в целочисленное преобразование - PullRequest
1 голос
/ 07 февраля 2020

Если я использую функцию int.from_bytes() для преобразования байта в шестнадцатеричной форме, это дает мне ожидаемый ответ. Но когда байт находится в десятичной форме, я получаю неожиданное значение. Я не могу понять математику за этим, пожалуйста, объясните. Я новичок в этом, мой вопрос может быть глупым, пожалуйста, попробуйте понять из примера кода ниже.

>>> testBytes = b'\x10'
>>> int.from_bytes(testBytes, byteorder='big', signed=True)
16
>>>testBytes1 = b'10'
>>>int.from_bytes(testBytes1, byteorder='big', signed=True)
12592

Здесь в переменной testBytes1 ожидаемый ответ был 10, почему я получаю такое большое значение Как эта функция работает, как я получу testBytes1 значение как целое число 10, как это в байтовой форме. Я получаю testBytes1 через порт USB.

Ответы [ 3 ]

3 голосов
/ 07 февраля 2020

То есть просто взять значение ascii для каждого символа:

Код:

testBytes1 = b'10'
print(int.from_bytes(testBytes1, byteorder='big', signed=True))

testBytes1 = b'\x31\x30'
print(int.from_bytes(testBytes1, byteorder='big', signed=True))

Results;

12592
12592
1 голос
/ 07 февраля 2020

Самый эффективный способ, на мой взгляд, - декодировать байт в строку, а затем преобразовывать его в любой требуемый тип данных. Скажем, байт хранится в переменной n, тогда

x = n.decode('utf-8')

x, теперь будет строкой, которую можно преобразовать в целое число, число с плавающей запятой или любой требуемый тип данных, вызвав соответствующий конструктор, как int(x)

1 голос
/ 07 февраля 2020

Вы можете преобразовать байты в строку, а затем преобразовать ее в целое число.

>>> B = b'10'
>>> int(B.decode('utf-8'))
10
...