【问题标题】:Python3 searching in bytearrayPython3在字节数组中搜索
【发布时间】:2013-01-22 23:53:12
【问题描述】:

我在使用 find()/index()(不知道它们之间是否有任何区别)和 bytesarray 时遇到了这个奇怪的问题。

我正在处理二进制文件,我已将其加载为字节数组,现在我需要找到指示消息开头和消息结尾的标记。 找到消息的开头 (0x03 0x02) 一切正常,但是当我搜索结尾 (0x00) 时,我一直得到相同的位置。

    msg_start_token = bytearray((int(0x03), int(0x02)))
    msg_end_token = bytes(int(0x00))

    def get_message(file,start_pos):
        msg_start = file.find(msg_start_token,start_pos) + 2
        print(hex(msg_start))
        msg_end = file.find(msg_end_token,msg_start)
        print(hex(msg_end))
        msg = file[msg_start:msg_end]
        print(msg)
        return (msg, msg_end)  

我之前没有真正使用过二进制文件,所以我不知道我是否错过了一些非常简单的东西。

【问题讨论】:

    标签: python file python-3.x binary find


    【解决方案1】:

    你需要从下一个位置开始搜索,所以搜索:

    file.find(msg_start_token, start_pos + 1)
    

    因为搜索开始start_pos,如果在那个位置找到msg_start_token,find当然会返回start_pos

    至于.index().find()的区别;如果未找到子字符串,.index() 将引发 ValueError 异常,而 .find() 则返回 -1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      相关资源
      最近更新 更多