まぁ、色々と必要に駆られたので、16進数ダンプを行うコードを作ってみた。
#!/bin/env python # -*- encoding: euc_jp -*- """ 16進数ダンプするモジュール """ def dump(fs, start, count): """16進数ダンプ出力を行う \arg fs fileストリーム \arg start ダンプ開始位置 \arg count ダンプ個数 """ fs.seek(start) for i in range(count): if (i % 16) == 0: line = "%08x : " % (start + i) asc = "" if ((i + 8) % 16) == 0: line = line + "- " v1 = fs.read(1) v2 = ord(v1) line = line + "%02x " % (v2) asc = asc + ['.', chr(v2)][chr(v2).isalnum()] if (i % 16) == (16 - 1): print line + ": " + asc line = None if line: for j in range(16 - (count % 16)): if ((i + j + 8) % 16) == 0: line = line + "- " line = line + " " print line + ": " + asc # debug only def main(): f = open("dump.py") dump(f, 0, 100) if __name__ == "__main__": main()
誰か添削してもらえませんかね?このコード。もちっと うまく書けそうな気がするんだが、今一わかんないのと、周りに Python ハカーな人がいないので、相談できなひ…。
余談だけど、LinuxやCygwinだと、こんな使い方も出来る。
In [1]: import dump as d In [2]: f = open("/dev/mem") In [3]: d.dump(f, 0, 100) 00000000 : 53 ff 00 f0 53 ff 00 f0 - c3 e2 00 f0 53 ff 00 f0 : S...S.......S... 00000010 : 53 ff 00 f0 54 ff 00 f0 - d4 e4 00 f0 53 ff 00 f0 : S...T.......S... 00000020 : a5 fe 00 f0 87 e9 00 f0 - 33 ff 00 f0 33 ff 00 f0 : ........3...3... 00000030 : 33 ff 00 f0 33 ff 00 f0 - 57 ef 00 f0 8f f6 00 f0 : 3...3...W....... 00000040 : 12 13 00 c0 4d f8 00 f0 - 41 f8 00 f0 70 2b dc ea : ....M...A...p... 00000050 : 39 e7 00 f0 59 f8 00 f0 - b2 85 00 f0 d2 ef 00 f0 : 9...Y........... 00000060 : 59 ff 00 f0 - : Y...