将二进制数据转换为十六进制格式并从中恢复
项目描述
它是关于什么的?
dump 二进制到十六进制并 恢复
Linux / Windows / OS X
Python 2/3
库和命令行工具
命令行
从命令行执行hexdump.py有以下三种方式
$ python hexdump.py $ python hexdump-3.2.zip # after installing with `pip install hexdump` $ python -m hexdump
以十六进制形式转储二进制数据
$ python -m hexdump binary.dat 0000000000: 00 00 00 5B 68 65 78 64 75 6D 70 5D 00 00 00 00 ...[hexdump].... 0000000010: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF .."3DUfw........
从保存的十六进制转储中恢复二进制数据
$ python -m hexdump --restore hexdump.txt > binary.dat
基本API
dump(binary, size=2, sep=’ ‘)
将二进制数据(Python 3中的bytes和Python 2中的str)转换为类似于‘00 DE AD BE EF’的字符串。size 参数指定文本块长度,而 sep 设置块分隔符。
dehex(hextext)
辅助函数,将十六进制字符串转换为二进制数据,如果需要,从 hextext 中删除空白字符。
高级API:写入完整转储
Python 2
>>> hexdump('\x00'*16) 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Python 3
>>> hexdump('\x00'*16) ... TypeError: Abstract unicode data (expected bytes) >>> hexdump.hexdump(b'\x00'*16) 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Python 3的字符串是抽象Unicode表中的索引序列。每个索引指向一个符号,该符号不指定其二进制值。要将符号转换为二进制数据,您需要查找编码中的索引值对应的二进制值。
以下是相同俄语文本在从Python 3的抽象Unicode整数转换为Windows-1251编码的字节和UTF-8编码的字节时的样子。
>>> message = 'интерференция' >>> hexdump(message.encode('windows-1251')) 00000000: E8 ED F2 E5 F0 F4 E5 F0 E5 ED F6 E8 FF ............. >>> hexdump(message.encode('utf-8')) 00000000: D0 B8 D0 BD D1 82 D0 B5 D1 80 D1 84 D0 B5 D1 80 ................ 00000010: D0 B5 D0 BD D1 86 D0 B8 D1 8F ..........
高级API:从不同的十六进制转储格式恢复二进制数据
Python 2
>>> res = restore( ... '0010: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF .."3DUfw........') >>> res '\x00\x11"3DUfw\x88\x99\xaa\xbb\xcc\xdd\xee\xff' >>> type(res) <type 'str'>
Python 3
>>> res = restore( ... '0010: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF .."3DUfw........') >>> res b'\x00\x11"3DUfw\x88\x99\xaa\xbb\xcc\xdd\xee\xff' >>> type(res) <class 'bytes'>
运行自测
手动
$ hexdump.py --test output.txt $ diff -u3 hextest.txt output.txt
自动使用 tox
$ tox
问题
如果您还有其他问题,请随时在https://bitbucket.org/techtonik/hexdump/提交问题
变更日志
- 3.3 (2015-01-22)
如果指定“-”作为dump和restore的输入,则从sys.stdin接受输入(问题#1)
添加了normalize_py()辅助函数,以在Windows上将sys.stdout设置为二进制模式
- 3.2 (2015-07-02)
hexdump现在在所有平台上都打包为.zip文件(在Linux上创建的存档为tar.gz)
.zip文件可执行!尝试python hexdump-3.2.zip
dump()现在接受可配置的分隔符,由Ian Land修复(PR #3)
- 3.1 (2014-10-20)
实现了针对Python 3的神秘编码问题的解决方案(请参阅修订版本51302cf)
修复了在UTF-8不是默认编码的系统(Windows)上安装Python 3的问题,感谢George Schizas(问题是由读取README.txt引起的)
- 3.0 (2014-09-07)
移除了未使用的int2byte()辅助函数
添加了dehex(text)辅助函数,将十六进制字符串转换为二进制数据
向dump()辅助函数添加了“size”参数,用于指定数据块长度
- 2.0 (2014-02-02)
向命令行模式添加了–restore选项,可以从十六进制转储中获取二进制数据
支持使用–test logfile保存测试输出
从无空格的十六进制字符串恢复
如果输入数据不是字符串,则restore()现在将引发TypeError
在Python 2.x中,当请求生成器时,hexdump()和dumpgen()现在不返回unicode字符串
- 1.0 (2013-12-30)
地址长度从10减少到8
hexdump()新增了‘result’关键字参数,可以是‘print’,‘generator’或‘return’
实际的转储逻辑现在位于新的dumpgen()生成器函数中
新增了dump(binary)函数,它接受二进制数据并返回类似“66 6F 72 6D 61 74”的字符串
新增了genchunks(mixed, size)函数,它对序列和文件对象进行分块
- 0.5 (2013-06-10)
hexdump现在也是一个命令行实用程序(尚未提供restore功能)
- 0.4 (2013-06-09)
修复了在非英语版本的Windows上使用Python 3进行安装的问题,感谢George Schizas
- 0.3 (2013-04-29)
完全兼容Python 3
- 0.2 (2013-04-28)
restore()可以恢复从十六进制转储中提取的原始二进制数据,支持native、Far Manager和Scapy文本格式(其他格式也可能有效)
restore()兼容Python 3
- 0.1 (2013-04-28)
适用于Python 2的有效的hexdump()函数
发布清单
许可证
公共领域
致谢
项目详情
hexdump-3.3.zip的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | d781a43b0c16ace3f9366aade73e8ad3a7bd5137d58f0b45ab2d3f54876f20db |
|
MD5 | 0bf05d40e1af5abea6939215dfcb9105 |
|
BLAKE2b-256 | 55b3279b1d57fa3681725d0db8820405cdcb4e62a9239c205e4ceac4391c78e4 |