3const char* base64ToArrayLE = R
"JS(/* src/js/base64ToArrayLE.js */
8function base64ToArrayLE(b64, ArrayCls) {
10 const bin = atob(b64);
11 const bytes = new Uint8Array(bin.length);
12 for (let i = 0; i < bin.length; i++){
13 bytes[i] = bin.charCodeAt(i);
17 ArrayCls = Float32Array;
20 // Intermediate data container. 100% safe endianness
21 const dv = new DataView(bytes.buffer);
23 // Resulting array (of type Float32Array, for example)
24 const n = bytes.byteLength / ArrayCls.BYTES_PER_ELEMENT;
25 const out = new ArrayCls(n);
28 var getFuncName = 'get'+ArrayCls.name.replace('Array','')
29 dv.getFunc = dv[getFuncName]
31 for (let i = 0; i < n; i++){
32 out[i] = dv.getFunc(i * ArrayCls.BYTES_PER_ELEMENT, true); // little-endian
38function demo_base64(){
40 const elems = document.querySelectorAll("metadata[data-base64]");
41 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray
42 elems.forEach(elem => {
43 // set_image_value_tracker(elem)
45 window.metadata = elem
46 var b64 = elem.getAttribute("data-base64")
48 var type = elem.getAttribute("data-basetype")
57 //case 'Uint8Clamped':
58 // type = Uint8ClampedArray;
65 case 'unsigned short':
79 type = BigUint64Array;
90 console.warn('base64 unsupported type:', type)
93 var arr = base64ToArrayLE(b64, type)
94 //base64ToFloat32ArrayLE(b64)