代码之家  ›  专栏  ›  技术社区  ›  user7597554

在javascript中将uint8array转换为double

  •  3
  • user7597554  · 技术社区  · 7 年前

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

    有什么想法吗?

    2 回复  |  直到 7 年前
        1
  •  5
  •   Nina Scholz    7 年前

    你可以适应优秀的 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);
        2
  •  2
  •   floribon    5 年前

    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);
    }