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 中是否存在类似的东西?此外,如何将变量转换为字节?
先感谢您。
根据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)