我正在尝试将一些 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(.)
我将如何在 JavaScript 中做到这一点?我的第一个问题是 doubleToLongBits 方法。 JavaScript 中是否存在类似的东西?此外,如何将变量转换为字节?
先感谢您。
基于布莱恩的回答 https://stackoverflow.com/a/25943197/786559并在你的期望的代表 https://stackoverflow.com/questions/25942516/double-to-byte-array-conversion-in-javascript#comment40620571_25943197,您可以按如下方式使用类型化数组:
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();
<input type="number" id="input" step="0.01" onchange="interactiveExample()" />
<div id="output"></div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)