convert binary to float

Discussion in 'Python' started by Mason, Jun 1, 2008.

  1. Mason

    Mason Guest

    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
    Mason, Jun 1, 2008
    #1
    1. Advertising

  2. On Jun 1, 3:55 pm, Mason <> wrote:
    > 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
    George Sakkis, Jun 1, 2008
    #2
    1. Advertising

  3. Mason

    Mason Guest

    On Jun 1, 5:12 pm, George Sakkis <> wrote:
    > On Jun 1, 3:55 pm, Mason <> wrote:
    >
    >
    >
    > > 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!
    Mason, Jun 1, 2008
    #3
  4. Mason

    Mason Guest

    On Jun 1, 6:41 pm, Dennis Lee Bieber <> wrote:
    > On Sun, 1 Jun 2008 12:55:45 -0700 (PDT), Mason
    > <> declaimed the following in
    > comp.lang.python:
    >
    > > 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
    >
    > HTTP://wlfraed.home.netcom.com/
    > (Bestiaria Support Staff: )
    > HTTP://www.bestiaria.com/


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

    Mason
    Mason, Jun 1, 2008
    #4
  5. Mason

    Lie Guest

    On Jun 2, 2:55 am, Mason <> wrote:
    > 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.
    Lie, Jun 3, 2008
    #5
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Andy
    Replies:
    7
    Views:
    6,242
    Roedy Green
    May 10, 2004
  2. bd
    Replies:
    0
    Views:
    608
  3. music4
    Replies:
    4
    Views:
    1,295
    Lew Pitcher
    Sep 20, 2003
  4. Replies:
    2
    Views:
    723
  5. Carsten Fuchs
    Replies:
    45
    Views:
    1,509
    James Kanze
    Oct 8, 2009
Loading...

Share This Page