使用python处理和使用二进制数据HEX
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用python处理和使用二进制数据HEX,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1815字,纯文字阅读大概需要3分钟。
内容图文
![使用python处理和使用二进制数据HEX](/upload/InfoBanner/zyjiaocheng/695/d9bc9935db6a4b12b280b03b36abb1b8.jpg)
我正在尝试对某些字节值进行比较-源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:]相匹配.如果找不到匹配项,则应将计数器增加1,然后尝试再次对列表进行模式匹配.
我尝试了多种方法来使此字符串正常工作,我可以使testString正确递增,但是我一直遇到编码问题,其中各种方法都希望对字节进行ASCII化以进行比较.
我有点迷茫,而且不是第一次徘徊在将int更改为u到b的代码上,又没有遇到过像d9这样的保留值之类的问题,因此无法使用ASCII类型比较工具,例如如果testString中的format_type:(导致UnicodeDecodeError:’ascii’编解码器无法解码字节a9
我试图将所有内容都转换为整数,但这引发了此错误:ValueError:以int()为基数2:’的无效文字.或ValueError:int()以10为底的无效文字:“.”我试图将testString转换为十六进制字节,但一直得到TypeError:无法将hex()参数转换为十六进制(这比我确定的其他任何东西都多.)
我发现有很多资源都在谈论编码/十六进制比较,例如stackoverflow.com/questions/10561923/unicodedecodeerror-ascii-codec-cant-decode-byte-0xef-in-position-1),我只是找不到我可以完全理解的东西,或者指出了我的权利路径.
我已经坚持了一段时间,所以很感激收到任何指针.
解决方法:
我不确定您要做什么,但是我在Python 3.2.3中运行了此代码.
#f = open(fname, "rb")
#f_data = f.read()
#f.close()
f_data = b'\x12\x43\xff\xd9\x00\x23'
eof_markers = {
'jpg':b'\xff\xd9',
'pdf':b'\x25\x25\x45\x4f\x46',
}
for counter in range(-4, 0):
for name, marker in eof_markers.items():
print(counter, ('' if marker in f_data[counter:] else '!') + name)
我使用的是硬编码的f_data,但是您可以通过取消注释第1-3行和注释第4行来取消此操作.
这是输出:
-4 !pdf
-4 jpg
-3 !pdf
-3 !jpg
-2 !pdf
-2 !jpg
-1 !pdf
-1 !jpg
是否有您不需要做的事情?
内容总结
以上是互联网集市为您收集整理的使用python处理和使用二进制数据HEX全部内容,希望文章能够帮你解决使用python处理和使用二进制数据HEX所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。