How to read an integer value from a binary file?

2005-05-03 Thread Olivier Elbaz
Hi,

I read a bmp file (binary file) and I want to extract an integer value
from it (size value).
The whole binary file is read inside a list all_bmp_file.
I can read the size value with the following code:
for r in all_bmp_file[2:5]:
   n = struct.unpack('B',r)#B for unsigned char
   print n
Result:
(182,)
(47,)
(0,)
The problem is that I would like to read the 4 bytes (integer) as one
number like:
struct.unpack('i','\xb6/\x00\x00')
Result
(12214,)
Note that I can't use  struct.unpack('i',all_bmp_file[2:5]) inside my
program since I got a syntax error.

Could you help me to find a solution?
Thanks,
Olivier
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to read an integer value from a binary file?

2005-05-03 Thread Jeff Epler
As your 'for' loop shows, the number of items in the slice [2:5] is only
3, not 4.

Maybe you want the slice [2:6] instead.

 x = xx\xb6/\0\0
 struct.unpack('i', x[2:6])
(12214,)

Jeff


pgprzSG2OzoK4.pgp
Description: PGP signature
-- 
http://mail.python.org/mailman/listinfo/python-list

Re: How to read an integer value from a binary file?

2005-05-03 Thread Olivier Elbaz
Hi Jeff,

You was right, my problem was coming from the number of items that I
gave to the unpack method.
I was thinking,like an array in C, that slice [2:5] will give 4 items and not 3.

Thanks a lot for your help.
Olivier 

On 5/3/05, Jeff Epler [EMAIL PROTECTED] wrote:
 As your 'for' loop shows, the number of items in the slice [2:5] is only
 3, not 4.
 
 Maybe you want the slice [2:6] instead.
 
  x = xx\xb6/\0\0
  struct.unpack('i', x[2:6])
 (12214,)
 
 Jeff
 
 

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to read an integer value from a binary file?

2005-05-03 Thread John Machin
On Tue, 3 May 2005 19:46:17 +0200, Olivier Elbaz
[EMAIL PROTECTED] wrote:

Hi,

I read a bmp file (binary file) and I want to extract an integer value
from it (size value).
The whole binary file is read inside a list all_bmp_file.
I can read the size value with the following code:
for r in all_bmp_file[2:5]:
   n = struct.unpack('B',r)#B for unsigned char
   print n
Result:
(182,)
(47,)
(0,)
The problem is that I would like to read the 4 bytes (integer) as one
number like:
struct.unpack('i','\xb6/\x00\x00')
Result
(12214,)
Note that I can't use  struct.unpack('i',all_bmp_file[2:5]) inside my
program since I got a syntax error.

You may well have got a syntax error -- we can't tell as you posted
neither the exact code you tried to run, nor the actual error message
that you got. After correcting any syntax error, one would have
expected you to get a run-time error, like the following:

 b3 = '\xb6/\x00'
 import struct
 struct.unpack('i', b3)
Traceback (most recent call last):
  File stdin, line 1, in ?
struct.error: unpack str size does not match format


Luckily this time there was enough extraneous info for Jeff to
diagnose your problem. In future, please consider posting the code
that you ran, and the results that you got.

For the benefit of others who may fall into the same pit, you may like
to consider logging a feature request on sourceforge for the above
error message to be enhanced to show the sizes:

(e.g.) struct.error: unpack str size (3) does not match format (4)

This may make it easier for the perps to realise what has gone wrong
and save them from having to ask the newsgroup :-)

Cheers,
John
-- 
http://mail.python.org/mailman/listinfo/python-list