JavaScript中的双字节数组转换 [英] Double to Byte array conversion in javascript

查看:105
本文介绍了JavaScript中的双字节数组转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将一些Java代码转换为JavaScript,这正是我正在处理的应用程序所需要的.我陷入一个类及其方法中,该类将double型变量转换为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中是否存在类似的内容?此外,如何将变量转换为字节?

先谢谢您.

解决方案

基于 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(); 

 <input type="number" id="input" step="0.01" onchange="interactiveExample()" />
<div id="output"></div> 

I am trying to convert some Java code into JavaScript which is needed for the application I am working on. I am stuck on one class and its methods that convert a variable of type double to long, and then long to a byte array that consists of 8 bytes representing that long number. The Java code is as follows:

 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(.)

How would I go about doing this in JavaScript? My first issue is with the doubleToLongBits method. Does anything similar exist in JavaScript? Furthermore, how to cast a variable into a Byte?

Thank you in advance.

解决方案

Based on Brian's answer and on your desired representation, you can use the typed array as follows:

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>

这篇关于JavaScript中的双字节数组转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆