* Extracts a 32-bit float from byte array (little-endian).
(bytes, offset)
| 94 | * Extracts a 32-bit float from byte array (little-endian). |
| 95 | */ |
| 96 | function extractFloat32LE(bytes, offset) { |
| 97 | var b0 = bytes[offset], b1 = bytes[offset + 1]; |
| 98 | var b2 = bytes[offset + 2], b3 = bytes[offset + 3]; |
| 99 | |
| 100 | var sign = (b3 & 0x80) ? -1 : 1; |
| 101 | var exponent = ((b3 & 0x7F) << 1) | (b2 >> 7); |
| 102 | var mantissa = ((b2 & 0x7F) << 16) | (b1 << 8) | b0; |
| 103 | |
| 104 | if (exponent === 0) |
| 105 | return sign * mantissa * Math.pow(2, -149); |
| 106 | |
| 107 | if (exponent === 0xFF) |
| 108 | return mantissa ? NaN : sign * Infinity; |
| 109 | |
| 110 | return sign * (mantissa | 0x800000) * Math.pow(2, exponent - 150); |
| 111 | } |
| 112 | |
| 113 | /** |
| 114 | * Extracts a 16-bit signed integer from byte array (little-endian). |