writing numbers in binary file

Tim Chase python.list at tim.thechases.com
Mon May 31 12:42:18 EDT 2010


On 05/31/2010 10:56 AM, eskandari wrote:
> But when I try to write offset (number) in binary file, it raise
> exception below in line  "offsetfile.write(offset)"
> "TypeError: argument 1 must be string or read-only buffer, not int"
>
> I search the internet, find that all suggest converting number to
> string ---with str()---and then write string to file.
> But I shouldn't do this. because the above mentioned C++ function,
> read file with this assumption that there are numbers in file.
> So I want to know, Is there any way to produce an binary file
> containing numbers same as the way C++ does?

Well, you have at least two options:

1) use the pack/unpack functions in the "struct" module to 
convert a number to a byte representation that you can then write 
to a file

2) write the number to the file as a string and then use C++ 
libraries to parse a number from a string.

In both cases, you have to consider what happens when the number 
is outside the bounds of your C++ data-type (you don't mention 
what you're using...an int, a long, or "long long"; signed vs. 
unsigned).  Additionally in the first case, you have to make sure 
that your memory-architecture (big-endian vs. little-endian) 
matches on both sides; or that you marshal the data through a 
pre-defined format (in libraries, commonly called "network" 
format).  For such reasons, I'd stick with method #2 unless you 
have a strong reason not to.

-tkc







More information about the Python-list mailing list