convert binary to float

M

Mason

I have tried and tried...

I'd like to read in a binary file, convert it's 4 byte values into
floats, and then save as a .txt file.

This works from the command line (import struct);

In [1]: f = open("test2.pc0", "rb")
In [2]: tagData = f.read(4)
In [3]: tagData
Out[3]: '\x00\x00\xc0@'

I can then do the following in order to convert it to a float:

In [4]: struct.unpack("f", "\x00\x00\xc0@")
Out[4]: (6.0,)

But when I run the same code from my .py file:

f = open("test2.pc0", "rb")
tagData = f.read(4)
print tagData

I get this (ASCII??):
„@

I only know how to work with '\x00\x00\xc0@'.

I don't understand why the output isn't the same. I need a solution
that will allow me to convert my binary file into floats. Am I close?
Can anyone point me in the right direction?

Thanks,
Mason
 
G

George Sakkis

I have tried and tried...

I'd like to read in a binary file, convert it's 4 byte values into
floats, and then save as a .txt file.

This works from the command line (import struct);

    In [1]: f = open("test2.pc0", "rb")
    In [2]: tagData = f.read(4)
    In [3]: tagData
    Out[3]: '\x00\x00\xc0@'

I can then do the following in order to convert it to a float:

    In [4]: struct.unpack("f", "\x00\x00\xc0@")
    Out[4]: (6.0,)

But when I run the same code from my .py file:

    f = open("test2.pc0", "rb")
    tagData = f.read(4)
    print tagData

I get this (ASCII??):
„@

Remembering to put that struct.unpack() call in your module might
help ;-)

George
 
M

Mason

I have tried and tried...
I'd like to read in a binary file, convert it's 4 byte values into
floats, and then save as a .txt file.
This works from the command line (import struct);
In [1]: f = open("test2.pc0", "rb")
In [2]: tagData = f.read(4)
In [3]: tagData
Out[3]: '\x00\x00\xc0@'
I can then do the following in order to convert it to a float:
In [4]: struct.unpack("f", "\x00\x00\xc0@")
Out[4]: (6.0,)
But when I run the same code from my .py file:
f = open("test2.pc0", "rb")
tagData = f.read(4)
print tagData
I get this (ASCII??):
„@

Remembering to put that struct.unpack() call in your module might
help ;-)

George

Wow ... I did have it in there, but I forgot include it in my post.
Anyway, this works just fine:

f = open("test2.pc0", "rb")
tagData = f.read(4)
print struct.unpack("f", tagData)

Thanks for waking me up George!
 
M

Mason

I have tried and tried...
I'd like to read in a binary file, convert it's 4 byte values into
floats, and then save as a .txt file.
This works from the command line (import struct);
In [1]: f = open("test2.pc0", "rb")
In [2]: tagData = f.read(4)
In [3]: tagData

Interpreter display of raw object name uses repr()
Out[3]: '\x00\x00\xc0@'
I can then do the following in order to convert it to a float:
In [4]: struct.unpack("f", "\x00\x00\xc0@")
Out[4]: (6.0,)
But when I run the same code from my .py file:
f = open("test2.pc0", "rb")
tagData = f.read(4)
print tagData

Display from a print statement uses str()
I get this (ASCII??):
„@

Probably not ASCII -- ASCII doesn't have that spanish (?) bottom row
quote... And a pair of null bytes don't take up screen space.
I only know how to work with '\x00\x00\xc0@'.
I don't understand why the output isn't the same. I need a solution
that will allow me to convert my binary file into floats. Am I close?
Can anyone point me in the right direction?

Why do you have to /see/ the byte representation in the first
place... just feed the four bytes to the struct module directly.

import struct
fin = open("test2.pc0", "rb")
tagFloat = struct.unpack("f", fin.read(4))[0]
print tagFloat
--
Wulfraed Dennis Lee Bieber KD6MOG
(e-mail address removed) (e-mail address removed)
HTTP://wlfraed.home.netcom.com/
(Bestiaria Support Staff: (e-mail address removed))
HTTP://www.bestiaria.com/

Thanks Dennis, I'm OK now. I just sort of dropped the ball for a
bit :).

Mason
 
L

Lie

I have tried and tried...

I'd like to read in a binary file, convert it's 4 byte values into
floats, and then save as a .txt file.

This works from the command line (import struct);

    In [1]: f = open("test2.pc0", "rb")
    In [2]: tagData = f.read(4)
    In [3]: tagData
    Out[3]: '\x00\x00\xc0@'

I can then do the following in order to convert it to a float:

    In [4]: struct.unpack("f", "\x00\x00\xc0@")
    Out[4]: (6.0,)

But when I run the same code from my .py file:

    f = open("test2.pc0", "rb")
    tagData = f.read(4)
    print tagData

I get this (ASCII??):
„@

I only know how to work with '\x00\x00\xc0@'.

I don't understand why the output isn't the same. I need a solution
that will allow me to convert my binary file into floats. Am I close?
Can anyone point me in the right direction?

Thanks,
Mason

Did you know that '\x00\x00\xc0@' is Python's representation for the
'„@'. A print function calls str() first on what it's going to print,
and thus the binary representation is converted into real characters
(in the range of ASCII). If you've designed your code to process this
representation, then you should call the repr() first, a better
solution would be to design the code to process the binary directly,
python "knows" how to work with it, like if you do a for-loop, it
knows to fetch '\xc0' as one character instead of four.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,899
Latest member
RodneyMcAu

Latest Threads

Top