Spooky has asked for the wisdom of the Perl Monks concerning the following question:

I have a floating point number, -324978.08, which I'd like to pack and put into a file (the hex: c113d5c851eb851f). Any suggestions would be welcome - thanks!

Replies are listed 'Best First'.
Re: packing a floating point
by ikegami (Patriarch) on Oct 20, 2010 at 19:23 UTC
    $ perl -e'print pack "d>", -324978.08' | od -t x1 0000000 c1 13 d5 c8 51 eb 85 1f 0000010

    pack

    Without the ">", the output will be platform-dependent.

      Without the ">", the output will be platform-dependent.

      Of course, with it, it's perl version dependent :-)

      $ perl -e'print pack "d>", -324978.08' Invalid type '>' in pack at -e line 1. $ perl -v This is perl, v5.8.8 built for i686-linux
        with it, it's perl version dependent

        If the output from pack 'd', ... on a earlier version of Perl, is the wrong endian for the need, it can be 'converted' by by applying reverse to the packed value:

        c:\test>perl -E"say pack 'd<', 12345.67689" | od -t x1 0000000 7f de 54 a4 d6 1c c8 40 0d 0a 0000012 c:\test>perl -E"say pack 'd>', 12345.67689" | od -t x1 0000000 40 c8 1c d6 a4 54 de 7f 0d 0a 0000012 c:\test>perl -E"say pack 'd', 12345.67689" | od -t x1 0000000 7f de 54 a4 d6 1c c8 40 0d 0a 0000012 c:\test>perl -E"say scalar reverse pack 'd', 12345.67689" | od -t x1 0000000 40 c8 1c d6 a4 54 de 7f 0d 0a 0000012
      Ikegami, Thanks! I'm trying to create another variable instead of piping to the screen - not sure about the "od -t xl" - how would I create a $var with the same output?

        If you want to assign a value to a var instead of printing it, well... do just that.

        print $val;
        becomes
        my $var = $val;
Re: packing a floating point
by zentara (Cardinal) on Oct 20, 2010 at 18:53 UTC
Re: packing a floating point
by roboticus (Chancellor) on Oct 20, 2010 at 18:24 UTC

    Spooky:

    I'd use the pack function, as described in:

    perldoc -f pack

    ...roboticus

      To be fair, the doco for pack() and unpack() isn't exactly the easiest in the world to understand!