For Programmers: Free Programming Magazines  


Home > Archive > PHP Language > March 2004 > Reading an Excel file









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Reading an Excel file
Matthias Drescher

2004-03-30, 10:35 am

Hi there,

I have a litte problem while reading from a Excelfile.
Im try to read a 4 byte value and convert it into an integer or floating
point value with the following criteria:

Thats what the definiton says:

An RK valie is an encoded integer or floating-point value. RK values have a
size of 4 bytes and are used to decrease the size for floating-point values.
Structure of an RK value (32-bit value),

Bit |Mask |Contents
----------------------------------------------------------------------------
----------------------
0 00000001(hex) 0 = Value not changed 1 = Value is
multiplied by 100
1 00000002(hex) 0 = Floating Point Value 1 = Signed
integer value
31-2 FFFFFFFC(hex) Encoded Value

If Bit 1 is cleared, the encoded value represents the 30 most significant
bits of an IEEE 754 floating point value (64-bit double precision). The 43
least significant bits must be set to zero. If bit 1 is set, the encoded
value represents a signed 30-bit integer value. To get the correct integer,
the encoded value has to be shifted right arithmetically by 2 bits. If bit 0
us set, the decoded value (both integer and floating-point) must be be
divided by 100 to get the final result.

So far what the definition says.

Could anybody helpme with a function that does what the definiton says ???

I tried to solve this with the following function:

<?
function double4byte()
{
// for testing a fixed value:
// test float value 1
//$val = 0x3FF00000;
// test float value 2
//$val = 0x3FF00001;
// test integer value 1
//$val = 0x004B5646;
// test integer value 2
$val = 0x004B5647;

if (($val & 0x02) != 0)
{
echo "Integer ... ";
$intval = $val >> 2;
$value = doubleval($intval);

if (($val & 0x01) != 0)
{
echo "multiplied by 100 ... ";
$value /= 100;
}
return $value;
}
else
{
echo "floating point ... ";
$valbits = $val & 0xfffffffc;
$valbits = $valbits << 32;
$value = $valbits;

if (($val & 0x01) != 0)
{
echo "multiplied by 100 ... ";
$value /= 100;
}
return $value;
}
}

echo double4byte();

?>

I´m quite sure that it works for the integer values, but the floating point
operations are a big problem for me.
Could anybody help me please ???

Best regards Matthias


Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com