Programming Tutorials

Comment on Tutorial - Convert a hex string into a 32-bit IEEE 754 float number in PHP By Julian L



Comment Added by : Mark

Comment Added at : 2015-02-02 14:42:56

Comment on Tutorial : Convert a hex string into a 32-bit IEEE 754 float number in PHP By Julian L
My code:

$hex=array('C4028000','457F9000','2D7F5','0002D7F5','47D9F95E','000040E4');

foreach($hex as $h){
echo $h.'='.hexTo32Float($h).'<br>';
}

function hexTo32Float($strHex) {
$v = hexdec($strHex);
$x = ($v & ((1 << 23) - 1)) + (1 << 23) * ($v >> 31 | 1);
$exp = ($v >> 23 & 0xFF) - 127;
return $x * pow(2, $exp - 23);
}

This outputs:

C4028000=522
457F9000=4089
2D7F5=6.0080426430695E-39
0002D7F5=6.0080426430695E-39
47D9F95E=111602.734375
000040E4=5.8891109391561E-39

The first output differs from yours as it is positive. The other values match yours. However, the last one (000040E4=5.8891109391561E-39) doesn't agree with http://babbage.cs.qc.cuny.edu/IEEE-754/index.xhtml, which tells me the decimal value of 000040E4 is 2.3278370089363861182184995837612086772827711378452680000428418331977209465577516311896033585071563720703125E-41

And http://babbage.cs.qc.cuny.edu/IEEE-754.old/32bit.html tells me it should be: 2.327837008936386e-41

Is this an error in the function or an error on the other site?

Cheers,
Mark.


View Tutorial