What is it about?
* *dump* binary to hex and *restore* it back
* Linux / Windows / OS X
* Python 2/3
* library and command line tool
command line
============
There are three ways to execute hexdump.py from command line::
$ python hexdump.py
$ python hexdump-3.2.zip
# after installing with `pip install hexdump`
$ python -m hexdump
Dump binary data in hex form::
$ 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........
Restore binary from a saved hex dump::
$ python -m hexdump --restore hexdump.txt > binary.dat
basic API
=========
dump(binary, size=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(hextext)
Helper to convert from hex string to binary data
stripping whitespaces from `hextext` if necessary.
advanced API: write full dumps
==============================
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 string is a sequence of indexes in abstract unicode
table. Each index points to a symbol, which doesn't specify
its binary value. To convert symbol to binary data, you need
to lookup binary a value for in in the encoding.
Here is how the same Russian text looks when transformed from
abstract unicode integers of Python 3 to bytes in Windows-1251
encoding and to bytes in 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 ..........
advanced API: restore binary data from different hexdump formats
================================================================
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'>
run self-tests
==============
Manually::
$ hexdump.py --test output.txt
$ diff -u3 hextest.txt output.txt
Automatically with `tox`::
$ tox
questions
=========
| Q: Why creating another module when there is binascii already?
| A: ``binascii.unhexlify()`` chokes on whitespaces and linefeeds.
| ``hexdump.dehex()`` doesn't have this problem.
If you have other questions, feel free to open an issue
at https://bitbucket.org/techtonik/hexdump/
ChangeLog
=========
3.3 (2015-01-22)
* accept input from sys.stdin if "-" is specified
for both dump and restore (issue #1)
* new normalize_py() helper to set sys.stdout to
binary mode on Windows
3.2 (2015-07-02)
* hexdump is now packaged as .zip on all platforms
(on Linux created archive was tar.gz)
* .zip is executable! try `python hexdump-3.2.zip`
* dump() now accepts configurable separator, patch
by Ian Land (PR #3)
3.1 (2014-10-20)
* implemented workaround against mysterious coding
issue with Python 3 (see revision 51302cf)
* fix Python 3 installs for systems where UTF-8 is
not default (Windows), thanks to George Schizas
(the problem was caused by reading of README.txt)
3.0 (2014-09-07)
* remove unused int2byte() helper
* add dehex(text) helper to convert hex string
to binary data
* add 'size' argument to dump() helper to specify
length of chunks
2.0 (2014-02-02)
* add --restore option to command line mode to get
binary data back from hex dump
* support saving test output with `--test logfile`
* restore() from hex strings without spaces
* restore() now raises TypeError if input data is
not string
* hexdump() and dumpgen() now don't return unicode
strings in Python 2.x when generator is requested
1.0 (2013-12-30)
* length of address is reduced from 10 to 8
* hexdump() got new 'result' keyword argument, it
can be either 'print', 'generator' or 'return'
* actual dumping logic is now in new dumpgen()
generator function
* new dump(binary) function that takes binary data
and returns string like "66 6F 72 6D 61 74"
* new genchunks(mixed, size) function that chunks
both sequences and file like objects
0.5 (2013-06-10)
* hexdump is now also a command line utility (no
restore yet)
0.4 (2013-06-09)
* fix installation with Python 3 for non English
versions of Windows, thanks to George Schizas
0.3 (2013-04-29)
* fully Python 3 compatible
0.2 (2013-04-28)
* restore() to recover binary data from a hex dump in
native, Far Manager and Scapy text formats (others
might work as well)
* restore() is Python 3 compatible
0.1 (2013-04-28)
* working hexdump() function for Python 2
Release checklist
=================
| [ ] run tests
| [ ] update version in hexdump.py
| [ ] update ChangeLog in README.txt from hexdump.py
| [ ] python setup.py register sdist upload
License
=======
Public Domain
Credits
=======
| anatoly techtonik <techtonik@gmail.com>
| George Schizas
| Ian Land
Raw data
{
"_id": null,
"home_page": "https://bitbucket.org/techtonik/hexdump/",
"name": "hexdump",
"maintainer": "",
"docs_url": null,
"requires_python": null,
"maintainer_email": "",
"keywords": "",
"author": "anatoly techtonik <techtonik@gmail.com>",
"author_email": "UNKNOWN",
"download_url": "https://files.pythonhosted.org/packages/55/b3/279b1d57fa3681725d0db8820405cdcb4e62a9239c205e4ceac4391c78e4/hexdump-3.3.zip",
"platform": "UNKNOWN",
"description": "What is it about?\r\n\r\n* *dump* binary to hex and *restore* it back\r\n* Linux / Windows / OS X\r\n* Python 2/3\r\n* library and command line tool\r\n\r\n\r\ncommand line\r\n============\r\nThere are three ways to execute hexdump.py from command line::\r\n\r\n $ python hexdump.py\r\n $ python hexdump-3.2.zip\r\n\r\n # after installing with `pip install hexdump`\r\n $ python -m hexdump\r\n\r\nDump binary data in hex form::\r\n\r\n $ python -m hexdump binary.dat\r\n 0000000000: 00 00 00 5B 68 65 78 64 75 6D 70 5D 00 00 00 00 ...[hexdump]....\r\n 0000000010: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ..\"3DUfw........\r\n\r\nRestore binary from a saved hex dump::\r\n\r\n $ python -m hexdump --restore hexdump.txt > binary.dat\r\n\r\n\r\nbasic API\r\n=========\r\ndump(binary, size=2, sep=' ')\r\n\r\n Convert binary data (bytes in Python 3 and\r\n str in Python 2) to string like '00 DE AD BE EF'.\r\n `size` argument specifies length of text chunks\r\n and `sep` sets chunk separator.\r\n\r\ndehex(hextext)\r\n\r\n Helper to convert from hex string to binary data\r\n stripping whitespaces from `hextext` if necessary.\r\n\r\n\r\nadvanced API: write full dumps\r\n==============================\r\n\r\nPython 2::\r\n\r\n >>> hexdump('\\x00'*16)\r\n 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................\r\n\r\nPython 3::\r\n\r\n >>> hexdump('\\x00'*16)\r\n ...\r\n TypeError: Abstract unicode data (expected bytes)\r\n >>> hexdump.hexdump(b'\\x00'*16)\r\n 00000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................\r\n \r\nPython 3 string is a sequence of indexes in abstract unicode\r\ntable. Each index points to a symbol, which doesn't specify\r\nits binary value. To convert symbol to binary data, you need\r\nto lookup binary a value for in in the encoding.\r\n\r\nHere is how the same Russian text looks when transformed from\r\nabstract unicode integers of Python 3 to bytes in Windows-1251\r\nencoding and to bytes in UTF-8.\r\n\r\n >>> message = '\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f'\r\n >>> hexdump(message.encode('windows-1251'))\r\n 00000000: E8 ED F2 E5 F0 F4 E5 F0 E5 ED F6 E8 FF .............\r\n >>> hexdump(message.encode('utf-8'))\r\n 00000000: D0 B8 D0 BD D1 82 D0 B5 D1 80 D1 84 D0 B5 D1 80 ................\r\n 00000010: D0 B5 D0 BD D1 86 D0 B8 D1 8F ..........\r\n\r\n\r\nadvanced API: restore binary data from different hexdump formats\r\n================================================================\r\n\r\nPython 2::\r\n\r\n >>> res = restore(\r\n ... '0010: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ..\"3DUfw........')\r\n >>> res\r\n '\\x00\\x11\"3DUfw\\x88\\x99\\xaa\\xbb\\xcc\\xdd\\xee\\xff'\r\n >>> type(res)\r\n <type 'str'>\r\n\r\nPython 3::\r\n\r\n >>> res = restore(\r\n ... '0010: 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF ..\"3DUfw........')\r\n >>> res\r\n b'\\x00\\x11\"3DUfw\\x88\\x99\\xaa\\xbb\\xcc\\xdd\\xee\\xff'\r\n >>> type(res)\r\n <class 'bytes'>\r\n\r\n\r\nrun self-tests\r\n==============\r\nManually::\r\n\r\n $ hexdump.py --test output.txt\r\n $ diff -u3 hextest.txt output.txt\r\n\r\nAutomatically with `tox`::\r\n\r\n $ tox\r\n\r\n\r\nquestions\r\n=========\r\n| Q: Why creating another module when there is binascii already?\r\n| A: ``binascii.unhexlify()`` chokes on whitespaces and linefeeds.\r\n| ``hexdump.dehex()`` doesn't have this problem.\r\n\r\nIf you have other questions, feel free to open an issue\r\nat https://bitbucket.org/techtonik/hexdump/\r\n\r\n\r\nChangeLog\r\n=========\r\n3.3 (2015-01-22)\r\n * accept input from sys.stdin if \"-\" is specified\r\n for both dump and restore (issue #1)\r\n * new normalize_py() helper to set sys.stdout to\r\n binary mode on Windows\r\n\r\n3.2 (2015-07-02)\r\n * hexdump is now packaged as .zip on all platforms\r\n (on Linux created archive was tar.gz)\r\n * .zip is executable! try `python hexdump-3.2.zip`\r\n * dump() now accepts configurable separator, patch\r\n by Ian Land (PR #3)\r\n\r\n3.1 (2014-10-20)\r\n * implemented workaround against mysterious coding\r\n issue with Python 3 (see revision 51302cf)\r\n * fix Python 3 installs for systems where UTF-8 is\r\n not default (Windows), thanks to George Schizas\r\n (the problem was caused by reading of README.txt)\r\n\r\n3.0 (2014-09-07)\r\n * remove unused int2byte() helper\r\n * add dehex(text) helper to convert hex string\r\n to binary data\r\n * add 'size' argument to dump() helper to specify\r\n length of chunks\r\n\r\n2.0 (2014-02-02)\r\n * add --restore option to command line mode to get\r\n binary data back from hex dump\r\n * support saving test output with `--test logfile`\r\n * restore() from hex strings without spaces\r\n * restore() now raises TypeError if input data is\r\n not string\r\n * hexdump() and dumpgen() now don't return unicode\r\n strings in Python 2.x when generator is requested\r\n\r\n1.0 (2013-12-30)\r\n * length of address is reduced from 10 to 8\r\n * hexdump() got new 'result' keyword argument, it\r\n can be either 'print', 'generator' or 'return'\r\n * actual dumping logic is now in new dumpgen()\r\n generator function\r\n * new dump(binary) function that takes binary data\r\n and returns string like \"66 6F 72 6D 61 74\"\r\n * new genchunks(mixed, size) function that chunks\r\n both sequences and file like objects\r\n\r\n0.5 (2013-06-10)\r\n * hexdump is now also a command line utility (no\r\n restore yet)\r\n\r\n0.4 (2013-06-09)\r\n * fix installation with Python 3 for non English\r\n versions of Windows, thanks to George Schizas\r\n\r\n0.3 (2013-04-29)\r\n * fully Python 3 compatible\r\n\r\n0.2 (2013-04-28)\r\n * restore() to recover binary data from a hex dump in\r\n native, Far Manager and Scapy text formats (others\r\n might work as well)\r\n * restore() is Python 3 compatible\r\n\r\n0.1 (2013-04-28)\r\n * working hexdump() function for Python 2\r\n\r\n\r\nRelease checklist\r\n=================\r\n\r\n| [ ] run tests \r\n| [ ] update version in hexdump.py \r\n| [ ] update ChangeLog in README.txt from hexdump.py \r\n| [ ] python setup.py register sdist upload \r\n\r\n\r\nLicense\r\n=======\r\nPublic Domain\r\n\r\n\r\nCredits\r\n=======\r\n| anatoly techtonik <techtonik@gmail.com> \r\n| George Schizas \r\n| Ian Land",
"bugtrack_url": null,
"license": "Public Domain",
"summary": "dump binary data to hex format and restore from there",
"version": "3.3",
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"md5": "0bf05d40e1af5abea6939215dfcb9105",
"sha256": "d781a43b0c16ace3f9366aade73e8ad3a7bd5137d58f0b45ab2d3f54876f20db"
},
"downloads": -1,
"filename": "hexdump-3.3.zip",
"has_sig": false,
"md5_digest": "0bf05d40e1af5abea6939215dfcb9105",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 12658,
"upload_time": "2016-01-22T14:40:19",
"upload_time_iso_8601": "2016-01-22T14:40:19.589402Z",
"url": "https://files.pythonhosted.org/packages/55/b3/279b1d57fa3681725d0db8820405cdcb4e62a9239c205e4ceac4391c78e4/hexdump-3.3.zip",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2016-01-22 14:40:19",
"github": false,
"gitlab": false,
"bitbucket": true,
"bitbucket_user": "techtonik",
"bitbucket_project": "hexdump",
"lcname": "hexdump"
}