develooper Front page | perl.beginners | Postings from September 2009

Re: decimal to binary?

Thread Previous | Thread Next
From:
Chas. Owens
Date:
September 23, 2009 13:21
Subject:
Re: decimal to binary?
Message ID:
58ce48dc0909231321g380d2e2fg63c3624299c34f5f@mail.gmail.com
On Wed, Sep 23, 2009 at 15:32, Bob McConnell <rvm@cbord.com> wrote:
> From: Uri Guttman
>
>>>>>>> "BM" == Bob McConnell <rvm@CBORD.com> writes:
>>
>>   BM> From: Bryan R Harris
>>   >>
>>   >> I need to convert a number like this:   -3205.0569059
>>   >> ... into an 8-byte double (big and little endian), e.g. 4f 3e 52
> 00 2a
>>   BM> bc 93
>>   >> d3  (I just made up those 8 byte values).
>>   >>
>>   >> Is this easy in perl?  Are long and short ints easy as well?
>>
>>   BM> The sprintf() family is your friend.
>>
>> that will only generate text (hex and other formats). he needs pack
>> which does exactly what he wants. read perlpacktut for a tutorial on
>> pack/unpack and then perlfunc -f pack for the reference on it.
>
> That statement just confuses me. His initial value of -3205.0569059 is
> also text. It is the human readable representation of the number, and is
> not anything like what it looks like inside the computer. He just asked
> for a different format for that text. Why is sprintf not a reasonable
> way to do that?
snip

Because sprintf "%16x", .5 returns "0000000000000000" and you can't
recover .5 from that.  On the other hand you can say:
#!/usr/bin/perl

use strict;
use warnings;

my $n        = -3205.0569059;
my $packed   = pack "d", $n;
my $hex      = unpack "H*", $packed;
my $unpacked = unpack "d", pack "H*", $hex;
print
	"n        = $n\n",
	"packed   = $packed\n",
	"hex      = $hex\n",
	"unpacked = $unpacked\n";

-- 
Chas. Owens
wonkden.net
The most important skill a programmer can have is the ability to read.

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About