我想以旧文件格式读取数据。格式使用IBM floating point个数字,我想在JavaScript程序中阅读它。 IBM浮点表示法用于IBM System/360。
如何将IBM浮点数转换为JavaScript数字?
答案 0 :(得分:2)
此函数使用一个小端的IBM浮点缓冲区并将它们转换为数字:
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
}
请注意,不包括NaN,Infinity等特殊情况。
这来自:http://objectmix.com/perl/21834-ibm-32-bit-floating-point-conversion.html
答案 1 :(得分:0)
Hallgrim解决方案的一个小更新,它允许处理双精度浮点数:
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
}
var denom = 1
var totalBit = (buffer.length - 1) * 8
for (var i = 0; i < totalBit; i++) {
denom = denom * 2
fraction += bit(buffer, 8 + i) / denom
}
return (1 - 2 * sign) * Math.pow(16.0, exponent - 64) * fraction
}