javascript中双精度到字节数组的转换

elb*_*eth 2 javascript binary double

我正在尝试将一些 Java 代码转换为我正在开发的应用程序所需的 JavaScript。我被困在一个类及其方法上,这些方法将 double 类型的变量转换为 long,然后将 long 转换为由表示该 long 数字的 8 个字节组成的字节数组。Java代码如下:

 public static byte[] doubleToByteArray(double number)
   {
     // double to long representation
     long longNum = Double.doubleToLongBits(number);

     // long to 8 bytes
     return new byte[] {(byte)((longNum >>> 56) & 0xFF),
                     (byte)((longNum >>> 48) & 0xFF),
                     (byte)((longNum >>> 40) & 0xFF),
                     (byte)((longNum >>> 32) & 0xFF),
                     (byte)((longNum >>> 24) & 0xFF),
                     (byte)((longNum >>> 16) & 0xFF),
                     (byte)((longNum >>>  8) & 0xFF),
                     (byte)((longNum >>>  0) & 0xFF)};
  }  // end doubleToByte(.)
Run Code Online (Sandbox Code Playgroud)

我将如何在 JavaScript 中做到这一点?我的第一个问题是 doubleToLongBits 方法。JavaScript 中是否存在类似的东西?此外,如何将变量转换为字节?

先感谢您。

Cip*_*agă 5

根据Brian 的回答和您想要的表示,您可以使用类型化数组,如下所示:

function doubleToByteArray(number) {
    var buffer = new ArrayBuffer(8);         // JS numbers are 8 bytes long, or 64 bits
    var longNum = new Float64Array(buffer);  // so equivalent to Float64

    longNum[0] = number;

    return Array.from(new Int8Array(buffer)).reverse();  // reverse to get little endian
}

function interactiveExample() {
    var input = parseFloat(document.getElementById('input').value);
    var output = document.getElementById('output');
    var result = doubleToByteArray(input);

    output.innerHTML = '[' + result[0];
    for (var i = 1; i < result.length; i++) {
        output.innerHTML += ', ' + result[i];
    }
    output.innerHTML += ']';
}

document.getElementById('input').value = Math.PI;
interactiveExample();
Run Code Online (Sandbox Code Playgroud)
<input type="number" id="input" step="0.01" onchange="interactiveExample()" />
<div id="output"></div>
Run Code Online (Sandbox Code Playgroud)