Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 1x 1x 1x 64x 1x 1x 64x 4096x 4096x 1x 1x 100x 100x 100x 1643x 1643x 1643x 1643x 1643x 1643x 1643x 1643x 1643x 1643x 1643x 100x 35x 35x 35x 35x 35x 35x 35x 65x 32x 32x 32x 32x 32x 32x 32x 32x 32x 100x | import {alphabet} from './constants';
export const createToBase64BinUint8 = (chars: string = alphabet, pad: string = '=') => {
Iif (chars.length !== 64) throw new Error('chars must be 64 characters long');
const table = chars.split('').map((c) => c.charCodeAt(0));
const table2: number[] = [];
for (const c1 of table) {
for (const c2 of table) {
const two = (c1 << 8) + c2;
table2.push(two);
}
}
const PAD: number = pad.length === 1 ? pad.charCodeAt(0) : 0;
return (uint8: Uint8Array, start: number, length: number, dest: Uint8Array, offset: number): number => {
const extraLength = length % 3;
const baseLength = length - extraLength;
for (; start < baseLength; start += 3) {
const o1 = uint8[start];
const o2 = uint8[start + 1];
const o3 = uint8[start + 2];
const v1 = (o1 << 4) | (o2 >> 4);
const v2 = ((o2 & 0b1111) << 8) | o3;
let u16 = table2[v1];
dest[offset++] = u16 >> 8;
dest[offset++] = u16;
u16 = table2[v2];
dest[offset++] = u16 >> 8;
dest[offset++] = u16;
}
if (extraLength === 1) {
const o1 = uint8[baseLength];
const u16 = table2[o1 << 4];
dest[offset++] = u16 >> 8;
dest[offset++] = u16;
if (PAD) {
dest[offset++] = PAD;
dest[offset++] = PAD;
}
} else if (extraLength) {
const o1 = uint8[baseLength];
const o2 = uint8[baseLength + 1];
const v1 = (o1 << 4) | (o2 >> 4);
const v2 = (o2 & 0b1111) << 2;
const u16 = table2[v1];
dest[offset++] = u16 >> 8;
dest[offset++] = u16;
dest[offset++] = table[v2];
if (PAD) dest[offset++] = PAD;
}
return offset;
};
};
|