我正在尝试比较一些字节值 - 源 A 来自正在“读取”的文件:
f = open(fname, "rb")
f_data = f.read()
f.close()
这些文件的大小可以从几 Kb 到几 Mb 不等
源 B 是已知模式的字典:
eof_markers = {
'jpg':b'\xff\xd9',
'pdf':b'\x25\x25\x45\x4f\x46',
}
(一旦基本流程有效,此列表将被扩展)
本质上,我正在尝试“读取”文件(源 A),然后逐步检查最后一个字节是否与模式列表testString = f_data[-counter:]
匹配.
我已经尝试了多种不同的方法来使其正常工作,我可以让 testString 正确递增,但我一直遇到编码问题,各种方法都希望对字节进行 ASCII 化以进行比较。
我有点迷茫,并不是第一次在代码中徘徊,更改int
为u
,b
也没有遇到像d9
保留值这样的问题,因此无法使用 ASCII 类型比较工具,例如if format_type in testString:
(导致UnicodeDecodeError: 'ascii' codec can't decode byte a9
我试图将所有内容都转换为整数,但这引发了这个错误:ValueError: invalid literal for int() with base 2: '.'
或者ValueError: invalid literal for int() with base 10: '.'
我试图将其转换testString
为十六进制字节,但不断得到TypeError: hex() argument can't be converted to hex
(这比我确定的其他任何事情都更缺乏理解!....)
我发现有很多资源可以讨论编码/十六进制比较,例如 stackoverflow.com/questions/10561923/unicodedecodeerror-ascii-codec-cant-decode-byte-0xef-in-position-1),我已经只是没有找到我可以完全理解的东西,或者指出我走上正确道路的东西。
我一直坚持这一点已经有一段时间了,所以任何指点都非常感激。