2013年3月18日月曜日

[Python]バイナリファイル読み込み

import sys
import binascii
import struct

if len(sys.argv) != 2:
    print "%s <input file>" % sys.argv[0]
    exit()

print "Input file: %s" % sys.argv[1]
fdInput = open(sys.argv[1], 'rb')

### HEX ###
print "HEX"
i = 0
while 1:
    b = fdInput.read(1)
    if b == "":
        break
    print binascii.b2a_hex(b),
    if ((i + 1) % 16) == 0:
        print "" # Line break
    i = i + 1

print ""
print ""

### Character ###
fdInput.seek(0)
print "Character"
while 1:
    b = fdInput.read(1)
    if b == "":
        break
    print "%c" % b,

print ""
print ""

### 16 byte String data ###
fdInput.seek(0)
b = fdInput.read(16)
print "%s" % b
print ""

### 4 byte unsigned char data ###
i = 0
while 1:
    if i >= 4:
        break
    i = i + 1
    b = fdInput.read(1)
    print binascii.b2a_hex(b),

print ""
print ""

### 2 byte unsigned short data ###
b = fdInput.read(2)
s = struct.unpack('!H', b) # Network byte order (Big endian)
print "0x%04x" % s,
print " = %d" % s
print ""

### 4 byte unsigned long data ###
b = fdInput.read(4)
l = struct.unpack('!L', b)
print "0x%08x" % l,
print " = %d" % l
fdInput.close()

実行結果
> python binFile.py sample.bin
Input file: sample.bin
HEX
48 45 4c 4c 4f 00 00 00 00 00 00 00 00 00 00 00
01 02 03 04 01 f4 00 01 5f 90
Character
H E L L O
HELLO
01 02 03 04
0x01f4 = 500
0x00015f90 = 90000

0 件のコメント:

コメントを投稿