Python3将bytes对象转换为int

时间:2019-03-06 16:18:59

标签: python python-3.x string int

我有一个从套接字收到的字节对象,我想提取它包含的整数值。

看起来像这样

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。看起来对象没有改变,只是它的某些表示形式已经改变。 / p>

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

如何从中提取int?

1 个答案:

答案 0 :(得分:3)

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