Float32Array转Uint8Array字节数不匹配,如何正确按字节重解释
错误原因
new Uint8Array(typedArray)的原生逻辑是将输入TypedArray的每个元素值转换为uint8类型后生成新数组,因此得到的Uint8Array元素长度和原Float32Array的元素长度一致,不会对底层二进制数据做重解释,不符合需求。
最高效实现
无需遍历拷贝、无额外计算的零开销实现,直接基于Float32Array关联的底层ArrayBuffer创建Uint8Array视图即可:
var vertexBuffer = ...; // Float32Array // 通用兼容写法,哪怕vertexBuffer是从大缓冲区切出来的子视图也不会出错 var arr = new Uint8Array(vertexBuffer.buffer, vertexBuffer.byteOffset, vertexBuffer.byteLength);
该实现属于二进制层的视图重映射,没有任何数据转换或拷贝开销,得到的Uint8Array长度就是原Float32Array的字节总长度(即元素个数*4),每个float32值会被解释为连续的4个uint8字节。
内容的提问来源于stack exchange,提问作者Megidd
相关产品推荐
相关产品推荐

