in reply to Re: Re: Converting Hex to Float (and vise versa) (overly simple)
in thread Converting Hex to Float (and vise versa)

Because

print hex '428C0000'; 1116471296

The original input was in hex, you are printing decimal.


Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
Timing (and a little luck) are everything!
  • Comment on Re: Re: Re: Converting Hex to Float (and vise versa) (overly simple)
  • Download Code

Replies are listed 'Best First'.
Re: Re: Re: Re: Converting Hex to Float (and vise versa) (overly simple)
by Anonymous Monk on Feb 07, 2004 at 21:27 UTC

    Thanks, but the thing which hurt me is the 'no-symmetry':

    $float= unpack "f", pack "L", 0x428C0000; # $float is 70 $float= sprintf("%lx", unpack "L", pack "f", 70 ); print $float; # print 428C0000

    I take this as a fact but I don't understand why the exact
    opposite expression doesn't give back the original data:
    $is_not_hex = unpack "L", pack "f", 70 ;

      The reason has nothing to do with pack or unpack, it is the same reason that printing a hex constant doesn't print exactly what you see.

      print 0x428c0000; 1116471296

      Perl automatically converts hex values (as indicated by 0x...) to it internal (binary) representation when parsing the source code. It becomes just another perl number.

      Whenever perl prints out a number, it prints the ascii representation of it's decimal value, unless you specifically state that you want it printed in some other form. Ie. using printf or sprintf or similar.


      Examine what is said, not who speaks.
      "Efficiency is intelligent laziness." -David Dunham
      "Think for yourself!" - Abigail
      Timing (and a little luck) are everything!