首页 > 解决方案 > 使用python在二进制文件中搜索二进制字符串

问题描述

大家好,我正在使用 python 在二进制文件中搜索二进制字符串

我的二进制文件如下所示。

我想在下面找到粗体字。

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 21 00 37 28 23 00 3C 2D 58 F3 91 E2 00 1 0 8 01 00 00 7 C1 3B 51 8C DA A8 B0 EE 05 F8 F5 41 17 BA B1 DD 22 88 06 5E BE D4 D3 F3 EF 96 19 3A 26 D1 B3 25 50 7B 38 DD DA 96 0A 9F D0 9B A4 30 68 F5 2E 63 58 1 78 C7 F3 8A 59 FD 35 08 F9 13 5B 63 63 14 C8 12 6D 2E F1 B9 DA 7E 97 8F 1B 5E 19 67 DF A6 AA 5F 79 64 C5 04 FD 2E F8 7F 35 7D

这是我的代码,我的代码能够找到“58”、“F3”、“92”等单个字节,但不能作为整个字符串查找/搜索。

        with open(binary_file, 'r+b') as f:
        s = f.read()
        d = bytes(hex_string, 'utf-8')
        n = s.find(d)
        if n > -1:
            print(n)
        else:
            print("string not found")
           

你们能帮我找出整个字符串吗?提前致谢。

标签: pythonbinaryfilesbinarystreambinary-string

解决方案


bytes(hex_string, 'utf-8')将您的十六进制字符串逐个字符转换为字节。例如:

bytes('BEEF', 'utf-8') == b'BEEF'

所以你最终会在:中搜索四个字节。您正在寻找方法b'BEEF'[66, 69, 69, 70]fromhex

>>> bytes.fromhex('BEEF')
b'\xbe\xef'

推荐阅读