I'm trying to read a BMP file in Python. I know the first two bytes
indicate the BMP firm. The next 4 bytes are the file size. When I excecute:
fin = open("hi.bmp", "rb")
firm = fin.read(2)
file_size = int(fin.read(4))
I get
ValueError: invalid literal for int() with base 10: 'F#\x13'
What I want to do is reading those four bytes as an integer... It seems Python is reading them as characters and returning a string, which cannot be converted to an integer. How can I do this correctly?
解决方案
The read method returns a sequence of bytes as a string. To convert from a string byte-sequence to binary data, use the built-in struct module: http://docs.python.org/library/struct.html.
import struct
print(struct.unpack('i', fin.read(4)))
Note that unpack always returns a tuple, so struct.unpack('i', fin.read(4))[0] gives the integer value that you are after.
You should probably use the format string '