我有一个从套接字收到的字节对象,我想提取它包含的整数值。
看起来像这样
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?
答案 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