Python3 конвертировать байты объекта в int - PullRequest
0 голосов
/ 06 марта 2019

У меня есть объекты в байтах, которые я получил от сокета, и я хочу извлечь целочисленное значение, которое он содержит.

Похоже на это

input = b'1         \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

Я пытался

tmp_str = input.decode('ascii').strip()
int(tmp_str)

Ошибка:

ValueError: invalid literal for int() with base 10: '1         \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

Однако тип tmp_str равен 'str', а длина 20 .. Похоже, объект не изменился, а только некоторые представленияон изменился ..

>>> print(tmp_str)
1
>>> len (tmp_str)
20
>>> type(tmp_str)
<class 'str'>
>>> type(input)
<class 'bytes'>

Как я могу извлечь из него int?

1 Ответ

3 голосов
/ 06 марта 2019

str.strip() и bytes.strip() не будут удалять байты NUL, если вы не укажете им явно, поскольку байты NUL не являются пробелами.

Однако вам не нужно декодировать байты в str, поскольку int() может принимать bytes объекты напрямую.Просто позвоните bytes.strip() и скажите, чтобы он убрал оба пробела и NUL:

int(input.strip(b' \x00')

Демо:

>>> input = b'1         \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>> int(input.strip(b' \x00'))
1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...