Loading...
Searching...
No Matches
base64ToArrayLE.h
1
3const char* base64ToArrayLE = R"JS(/* src/js/base64ToArrayLE.js */
8function base64ToArrayLE(b64, ArrayCls) {
9
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);
14 }
15
16 if (!ArrayCls){
17 ArrayCls = Float32Array;
18 }
19
20 // Intermediate data container. 100% safe endianness
21 const dv = new DataView(bytes.buffer);
22
23 // Resulting array (of type Float32Array, for example)
24 const n = bytes.byteLength / ArrayCls.BYTES_PER_ELEMENT;
25 const out = new ArrayCls(n);
26
28 var getFuncName = 'get'+ArrayCls.name.replace('Array','')
29 dv.getFunc = dv[getFuncName]
30
31 for (let i = 0; i < n; i++){
32 out[i] = dv.getFunc(i * ArrayCls.BYTES_PER_ELEMENT, true); // little-endian
33 }
34
35 return out;
36}
37
38function demo_base64(){
39
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)
44 console.info(elem)
45 window.metadata = elem
46 var b64 = elem.getAttribute("data-base64")
47 console.info(b64)
48 var type = elem.getAttribute("data-basetype")
49
50 switch (type){
51 case 'int8':
52 type = Int8Array;
53 break;
54 case 'uint8':
55 type = Uint8Array;
56 break;
57 //case 'Uint8Clamped':
58 // type = Uint8ClampedArray;
59 // break;
60 case 'int16':
61 case 'short':
62 type = Int16Array;
63 break;
64 case 'uint16':
65 case 'unsigned short':
66 type = Uint16Array;
67 break;
68 case 'int32':
69 type = Int32Array;
70 break;
71 case 'uint32':
72 type = Uint32Array;
73 break;
74 /*
75 case 'bigInt64':
76 type = BigInt64Array;
77 break;
78 case 'bigUint64':
79 type = BigUint64Array;
80 break;
81 */
82 case 'float16':
83 type = Float16Array;
84 break;
85 case 'float': // ?x
86 case 'float32':
87 type = Float32Array;
88 break;
89 default:
90 console.warn('base64 unsupported type:', type)
91 type = null;
92 }
93 var arr = base64ToArrayLE(b64, type)
94 //base64ToFloat32ArrayLE(b64)
95 console.info(arr)
96 })
97}
98)JS";