a bit messy but ... i'm thinking x86 byte order ?

===================================================================
#!/usr/local/bin/perl                                                           
                                               
use strict;

# a IEEE FP NUMBER
# http://www.psc.edu/general/software/packages/ieee/ieee.html
# Single Prec
# S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF
# 0 1      8 9                    31
# Double Prec
# S EEEEEEEEEEE FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
# 0 1  -11-  11 12                -52-                            63
# and my FP24
# S EEEEEEEEE FFFFFFFFFFFFFF
# 0 1  -9-  9 10   -14-   23
                                   
# in real life raw data is 14 K bytes
my @rawdata = ( 0x0e, 0x00, 0x00 );

my $fp24 = pack "CCC", $rawdata[2], $rawdata[1], $rawdata[0];
# in real life .. now shift off the 3 elements, for the next stuff

my $binary_string = unpack("B*", $fp24);
print "010110100011110000001111\n";
print "$binary_string\n"; # good
print "2 " . "-" x 50 . "\n";

# so far so good ....
# now a real number 2.25
@rawdata = ( 0x00, 0x10, 0x40 );
$fp24 = pack "CCC", $rawdata[2], $rawdata[1], $rawdata[0];

# print $fp24; exit; od -t x1 40 10 00 good
                   
my $binary_string = unpack("B*", $fp24);
print "$binary_string\n"; # good
print "3 " . "-" x 50 . "\n";

$binary_string =~ /(.)(.{9})(.{14})/;
print "24FP SIGN:$1 EXP:$2 MANT:$3\n";
print "4 " . "-" x 50 . "\n";

# repack
my $ieeedouble = $1 . $2 . "00" . $3 . '0' x 38;
# see if bits are good
$ieeedouble =~ /(.{8})(.{8})(.{8})(.{8})(.{8})(.{8})(.{8})(.{8})/;
print "$1 $2 $3 $4 $5 $6 $7 $8\n";
$ieeedouble =~ /(.)(.{11})(.{52})/;
print "IEEEDBL SIGN:$1 EXP:$2 MANT:$3\n";
print "5 " . "-" x 50 . "\n";
# looks ok to me

$one = pack "B64", $ieeedouble;

# print $one; # od -t x1 40 04 00 00 00 00 00 00  correct bit order good

printf "%lf\n", $one; # this prints 0.00000

===================================================================



On Fri, 2005-04-15 at 08:53, Chris Devers wrote:
> On Fri, 15 Apr 2005, Pete Lancashire wrote:
> 
> > I've been trying pack/unpack but just can't seem to get
> > it to work. And maybe pack/unpack is not the right
> > way to go ?
> 
> Please show the code you've tried so far.
> 
> 
> 
> -- 
> Chris Devers


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


  • code so far Re: Converting a 'unique' floating point ... Pete Lancashire

Reply via email to