从字节获取字符串直到null

时间:2015-02-23 21:06:32

标签: python

给定一个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方法吗?

1 个答案:

答案 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:]

一旦查找空值,就会扫描字符串,然后创建一个切片。