在uavascript中将uint8array转换为double

时间:2017-09-11 10:06:18

标签: javascript arrays double uint8array

我有一个arraybuffer,我想获得双倍值。例如从[64,-124,12,0,0,0,0,0]我得到641.5

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以调整answer的优秀T.J. Crowder 并使用DataView#setUint8作为给定的字节。

var data =  [64, -124, 12, 0, 0, 0, 0, 0];

// Create a buffer
var buf = new ArrayBuffer(8);
// Create a data view of it
var view = new DataView(buf);

// set bytes
data.forEach(function (b, i) {
    view.setUint8(i, b);
});

// Read the bits as a float/native 64-bit double
var num = view.getFloat64(0);
// Done
console.log(num);

对于多个号码,您可以获取8个块。

function getFloat(array) {
    var view = new DataView(new ArrayBuffer(8));
    array.forEach(function (b, i) {
        view.setUint8(i, b);
    });
    return view.getFloat64(0);
}

var data =  [64, -124, 12, 0, 0, 0, 0, 0, 64, -124, 12, 0, 0, 0, 0, 0],
    i = 0,
    result = [];

while (i < data.length) {
    result.push(getFloat(data.slice(i, i + 8)));
    i += 8;
}

console.log(result);

答案 1 :(得分:0)

根据Nina Scholz的回答,我想出了一个简短的答案:

function getFloat(data /* Uint8Array */) {
  return new DataView(data.buffer).getFloat64(0);
}

或者如果您有一个大数组并且知道偏移量:

function getFloat(data, offset = 0) {
  return new DataView(data.buffer, offset, 8).getFloat64(0);
}