This function takes a buffer of little endian IBM floats and converts them to a number:
function ibm2js(buffer) {
var sign = buffer[0] >> 7
var exponent = buffer[0] & 0x7f
var fraction = 0
function bit(buffer, bit) {
return buffer[Math.floor(bit / 8)] >> (7 - (bit % 8)) & 1
}
for (var i = 0; i < 24; i++) {
fraction += bit(buffer, 8 + i) / (2 << i)
}
return (1 - 2 * sign) * Math.pow(16.0, exponent - 64) * fraction
}
Note that special cases like NaN, Infinity, etc. is not covered.
This was ported from: http://objectmix.com/perl/21834-ibm-32-bit-floating-point-conversion.html