将二进制数据转储为十六进制格式并从中还原

hexdump的Python项目详细描述


怎么回事?

  • dump二进制到十六进制,然后restore返回
  • Linux/Windows/OS X操作系统
  • Python2/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

转储(二进制,大小=2,sep=“”)

Convert binary data (bytes in Python 3 and str in Python 2) to string like ‘00 DE AD BE EF’. size argument specifies length of text chunks and sep sets chunk separator.

DEHEX(十六进制)

Helper to convert from hex string to binary data stripping whitespaces from hextext if necessary.

高级API:写入完整转储

Python2:

>>> hexdump('\x00'*16)
00000000: 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................

Python3:

>>> 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 string是抽象unicode中的一系列索引 桌子每个索引都指向一个符号,但没有指定 它的二进制值要将符号转换为二进制数据,需要 在编码中查找二进制的in值

以下是从 windows-1251中python 3到字节的抽象unicode整数 在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:从不同的hexdump格式还原二进制数据

Python2:

>>> 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'>

Python3:

>>> 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

问题

q:既然已经有了binasci,为什么还要创建另一个模块?
a:binascii.unhexlify()占用空白和换行符。
hexdump.dehex()没有这个问题。

如果您还有其他问题,请随时提出问题 在https://bitbucket.org/techtonik/hexdump/

更改日志

3.3(2015-01-22)
  • 如果指定了“-”,则接受sys.stdin的输入 对于转储和还原(问题1)
  • 要将sys.stdout设置为的新normalize py()帮助程序 Windows上的二进制模式
3.2(2015-07-02)
  • HexDump现在在所有平台上都打包为.zip (在Linux上创建的归档文件是tar.gz)
  • .zip是可执行的!试试python hexdump-3.2.zip
  • dump()现在接受可配置的分隔符,patch 作者:Ian Land(PR 3)
3.1(2014-10-20)
  • 实现了对付神秘编码的解决方案 Python 3的问题(请参阅修订版51302cf)
  • 修复UTF-8所在系统的Python 3安装 不是默认的(windows),多亏了george schizas (问题是由于读取README.txt引起的)
3.0(2014-09-07)
  • 删除未使用的int2byte()帮助程序
  • 添加dehex(文本)助手以转换十六进制字符串 到二进制数据
  • 将“size”参数添加到dump()助手以指定 块的长度
2.0(2014-02-02)
  • 将–restore选项添加到命令行模式以获取 从十六进制转储返回的二进制数据
  • 支持用测试日志文件保存测试输出
  • 从不带空格的十六进制字符串restore()
  • restore()现在如果输入数据是 不是字符串
  • hexdump()和dumpgen()现在不返回unicode 请求生成器时python 2.x中的字符串
1.0(2013-12-30)
  • 地址长度从10缩短到8
  • hexdump()得到了新的“result”关键字参数,它 可以是“打印”、“生成器”或“返回”
  • 实际转储逻辑现在位于new dumpgen()中 发电机功能
  • 获取二进制数据的新dump(binary)函数 并返回字符串,如“66 6F 72 6D 61 74”
  • 新的genchunks(混合,大小)函数 序列和类似文件的对象
0.5(2013-06-10)
  • hexdump现在也是一个命令行实用程序(no 恢复)
0.4(2013-06-09)
  • 用Python 3修复非英语版本的安装 Windows的版本,感谢George Schizas
0.3(2013-04-29)
  • 完全python 3 compatible
0.2(2013-04-28)
  • restore()从十六进制转储恢复二进制数据 本机、Far管理器和Scapy文本格式(其他 也可能起作用)
  • restore()与Python 3兼容
0.1(2013-04-28)
  • 为Python2工作hexdump()函数

发布清单

[]运行测试
[]更新hexdump.py中的版本
[]从hexdump.py更新readme.txt中的changelog
[]python setup.py register sdist upload

许可证

公共域

学分

安纳托利科技公司<;techtonik@gmail.com>;
乔治·希扎斯
伊恩兰德

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java爬虫获取外部网站搜索结果   java Bluestack未连接到eclipse   java如何从ConstraintViolationException Hibernamte获取数据库字段名   HttpResponse HttpResponse=httpClient引发java运行时错误。执行(httpPost);   Jama中矩阵的java点积和叉积   java有什么方法可以唯一地识别可扩展设备吗?   java我需要用*来写我的名字,但我不断遇到一个错误,我对编码很陌生   java变量是在内部类中访问的。需要被宣布为最终决定。但我不想宣布最终结果   java如何缩短base64图像字符串,Android?   JavaSpringMVC:计划方法不自动触发   图形学习Java 2D API的好资源是什么?   如何在java中对方法进行排队   java JavaFX多行   java Selenium无法在[链接]上找到基于CSS元素的密码字段元素http://www.cartasi.it/gtwpages/index.jsp   Java中的equals()和hashCode()契约   软删除情况下的java Hibernate二级缓存   java为什么这段代码要两次调用这些方法?