JavaScript 中的 java.lang.Double.longBitsToDouble 函数

tru*_*ank 5 javascript java

我在 JavasScipt 中有一个 BinaryStream 类,它从通过 XMLHHttpRequest 下载的数组中读取字节,并具有返回无符号字节(技术上是整数)的函数 next() 。我需要从流中读取一个 double 值,它与 Java 中的DataStream.readDouble()基本相同,它使用Double.longBitsToDouble(long)方法。我无法弄清楚 longBitsToDouble 方法是如何工作的。

这是我的代码:

var bits = stream.nextLong();
if (bits == 0x7ff0000000000000)
    this.variables = [Infinity];
else if (bits == 0xfff0000000000000)
    this.variables = [-Infinity];
else if (bits >= 0x7ff0000000000001 && bits <= 0x7fffffffffffffff || bits >= 0xfff0000000000001 && bits <= 0xfff0000000000001)
this.variables = [NaN];
else
{
    var s = ((bits >> 63) == 0) ? 1 : -1;
    var e = ((bits >> 52) & 0x7ff);
    this.variables = [(e == 0) ? (bits & 0xfffffffffffff) << 1 : (bits & 0xfffffffffffff) | 0x10000000000000];
    // This must be incorrect because it returns a number many times higher than it should
}
console.log(this.variables[0]);
Run Code Online (Sandbox Code Playgroud)

tru*_*ank 2

我发现了一个 JavaScript 库,它可以对字节数组中的许多不同类型的数字进行编码和解码