dub*_*ous 1 javascript base64 arraybuffer
给定一个base64字符串,创建ArrayBuffer. 特别是纯现代 JavaScript 中的无类型数组缓冲区。
第一个 SO 结果是2014 年的这个问题。接受的答案是
function _base64ToArrayBuffer(base64) {
var binary_string = window.atob(base64);
var len = binary_string.length;
var bytes = new Uint8Array(len);
for (var i = 0; i < len; i++) {
bytes[i] = binary_string.charCodeAt(i);
}
return bytes.buffer;
}
Run Code Online (Sandbox Code Playgroud)
它已经假定了一种类型,并且有评论表明这并不总是正确的。
今天这仍然是最好的解决方案吗?我们是否必须迭代 for 循环中的所有元素?使用 vanilla JS 是否有更好、更有效的方法来传递blob字符串的 a ?
一个示例问题是处理作为编码字符串提供的GLTF 缓冲区base64:
let str = 'data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA=';
Run Code Online (Sandbox Code Playgroud)
它有两个单独的标量(无符号短整型)和vec3(浮点)数据视图,需要进一步处理。
[编辑]
因此,最流行的答案在这里没有用,因为它创建了 aTypedArray但字符串中的数据base64并不代表同质数据集。
由于您str是 a data:uri,您可以使用fetch:
let str = 'data:application/octet-stream;base64,AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAAAA=';
fetch(str)
.then(b => b.arrayBuffer())
.then(buff => console.log( new Int8Array(buff) /* just for a view purpose */ ))
.catch(e => console.log(e))Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6151 次 |
| 最近记录: |