note 37534 deleted from language.types.float by aidan
| From: | aidan@php.net | Date: | Mon, 01 Nov 2004 12:12:04 +0000 |
| Subject: | note 37534 deleted from language.types.float by aidan | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-79434@lists.php.net to get a copy of this message | ||
Note Submitter: rob at xerasystems dot com
----
Hi,
A colleague and I are using the socket functions to get data from an Alphaserver running OpenVMS. He
writes out a packet of data from the Alpha that contains integers and floats and I pick them up
using my PHP script.
The two functions below take a 4 byte string that has been parsed from the socket buffer and
converts the string to an integer or float.
function cvt2int4($intstr,$int4)
{
// parse the string
$int0 = hexdec(bin2hex(substr($intstr,0,1)));
$int1 = hexdec(bin2hex(substr($intstr,1,1)));
$int2 = hexdec(bin2hex(substr($intstr,2,1)));
$int3 = hexdec(bin2hex(substr($intstr,3,1)));
// convert to an integer
$int4 = $int0*pow(2,0) + $int1*pow(2,8) + $int2*pow(2,16) + $int3*pow(2,24);
}
function cvt2float4($fltstr,$float4)
{
// Parse the string
$float0 = hexdec(bin2hex(substr($fltstr,0,1)));
$float1 = hexdec(bin2hex(substr($fltstr,1,1)));
$float2 = hexdec(bin2hex(substr($fltstr,2,1)));
$float3 = hexdec(bin2hex(substr($fltstr,3,1)));
// Convert to an integer representation
$float4 = $float0*pow(2,0) + $float1*pow(2,8) + $float2*pow(2,16) + $float3*pow(2,24);
// Get the Sign
$sign = ($float4 & 0x80000000) >> 31;
// Get the exponent
$exp = (($float4 & 0x7F800000) >> 23) - 127;
// Get the Mantissa
$mantissa = $float4 & 0x007FFFFF;
// Calculate the float
$sum = 0.0;
for ($i=-23;$i<0;$i++)
{
$value = $mantissa & 1;
$sum = $sum + $value*pow(2,$i)*pow(2,$exp);
$mantissa = $mantissa >> 1;
}
$sum = $sum + 1*pow(2,0)*pow(2,$exp);
if ($sign == 1)
$float4 = $sum*-1;
else
$float4 = $sum;
}