Python3 преобразует объект bytes в int

#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