#python #python-3.x #string #int
#python #python-3.x #строка #int
Вопрос:
У меня есть объекты bytes, которые я получил из сокета, и я хочу извлечь содержащееся в них целочисленное значение.
Выглядит следующим образом
input = b'1 x00x00x00x00x00x00x00x00x00x00'
Я пытался
tmp_str = input.decode('ascii').strip()
int(tmp_str)
Ошибка:
ValueError: invalid literal for int() with base 10: '1 x00x00x00x00x00x00x00x00x00x00'
Однако тип tmp_str
является 'str'
, а длина — 20
.. Похоже, что объект не изменен, но изменились только некоторые его представления..
>>> print(tmp_str)
1
>>> len (tmp_str)
20
>>> type(tmp_str)
<class 'str'>
>>> type(input)
<class 'bytes'>
Как я могу извлечь int из этого?
Ответ №1:
str.strip()
и bytes.strip()
не удалит нулевые байты, если вы не укажете им явно, поскольку нулевые байты не являются пробелами.
Однако вам не нужно декодировать байты в str
, поскольку int()
вы можете принимать bytes
объекты напрямую. Просто вызовите bytes.strip()
и скажите ему удалить оба пробела и NUL:
int(input.strip(b' x00')
ДЕМОНСТРАЦИЯ:
>>> input = b'1 x00x00x00x00x00x00x00x00x00x00'
>>> int(input.strip(b' x00'))
1