By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
455,643 Members | 1,797 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 455,643 IT Pros & Developers. It's quick & easy.

Reading an Excel file

P: n/a
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();

?>

Im 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
Jul 17 '05 #1
Share this question for a faster answer!
Share on Google+

This discussion thread is closed

Replies have been disabled for this discussion.