给定一个bytes对象和一个索引,我想从索引和下一个null(\ x00)之间的字节读取一个字符串。例如:
bstr=b'abc\x00defg'
addr_to_str(bstr,0) # 'abc'
addr_to_str(bstr,1) # 'bc'
addr_to_str(bstr,4) # 'defg'
我可以做以下事情:
def addr_to_str(bstr,i):
return bstr[i:].split(b'\x00')[0].decode('utf-8')
由于bytes对象非常大,我想要addr_to_str
的高效版本。我是Python的新手,当我只想访问第一个拆分结果时,我不知道解释器如何处理split()
调用。或者.decode()
是否必要?
问题:addr_to_str()
有更好的pythonic方法吗?
答案 0 :(得分:1)
(在Python 2中):
def addr_to_str(s, pos):
end = s.find('\0', pos + 1)
if end != -1:
return s[pos:end]
else:
return s[pos:]
一旦查找空值,就会扫描字符串,然后创建一个切片。