Int16ArrayToArrayBuffer()转换函数,arrayBufferToBase64()

Int16Array Convert To ArrayBuffer 二进制类型转换示例

function int16ArrayToArrayBuffer(int16Array) {
  return int16Array.buffer;
}
// 使用示例
// var int16Array = new Int16Array([1, 2, 3, 4, 5]);
// var arrayBuffer = int16ArrayToArrayBuffer(int16Array);

其实 Int8Array/Int32Array/Float32Array 也可以使用这个工具函数实现转换。

除了 Int16Array 使用上面代码实现转换 ArrayBuffer,下面的类型,也都支持这样的方式转换 buffer:

Int8Array

Uint8Array

Uint8ClampedArray

Int16Array

Uint16Array

Int32Array

Uint32Array

Float16Array

Float32Array

Float64Array

BigInt64Array

BigUint64Array


平时没怎么用过这些类型,有点懵,不熟悉。经过查资料,发现是这么的简单。

Int16Array 转换 ArrayBuffer 的其他方法

  function int16ArrayToArrayBuffer(int16Array) {
    var buffer = new ArrayBuffer(int16Array.length * 2);
    var view = new DataView(buffer);
    for (var i = 0; i < int16Array.length; i++) {
      view.setInt16(i * 2, int16Array[i], true); // 第三个参数true表示使用小端字节序
    }
    return buffer;
  }

ArrayBuffer To Base64 二进制类型转换Base64字符串 demo

  function arrayBufferToBase64(buffer) {
    // return btoa(String.fromCharCode(...new Uint8Array(buffer))); // ES6
    var array = new Uint8Array(buffer)
    var string = String.fromCharCode.apply(String, array)
    return window.btoa(string)
  }

一般在处理web中的二进制文件,才会用到这些转换函数工具。

比如,语音转换文字的时候,调用科大讯飞的 web socket 接口需要这样做。阿里云的语音识别,倒是不用 base64 ,我的感觉是:讯飞的接口还是没有阿里云的设计的优雅。讯飞经常出现api接口输入/输出都是base64,真是不忍直视,缺点:传输量变大、设计丑陋。

一般的 web 开发是用不到这些代码了。

如果你搜到了这个内容,感觉你就不是一般人了。你这是在搞什么研发啊……