write out the rest of the encode cases
This commit is contained in:
@@ -99,21 +99,21 @@ encode3(bytes: Uint8Array) {
|
|||||||
// ABCDEF GH1234 5678AB CDEFGH
|
// ABCDEF GH1234 5678AB CDEFGH
|
||||||
// n0 n1 n2 n3
|
// n0 n1 n2 n3
|
||||||
let n0 : number = b0 >> 2;
|
let n0 : number = b0 >> 2;
|
||||||
// n1 = 00GH1234
|
// n1 = __GH1234
|
||||||
// b0 = ABCDEFGH
|
// b0 = ABCDEFGH
|
||||||
// 4 = 00000100
|
// 4 = _____1__
|
||||||
// b0 % 4 = 000000GH
|
// b0 % 4 = ______GH
|
||||||
// (b0 % 4) << 4 = 00GH0000
|
// (b0 % 4) << 4 = __GH____
|
||||||
// b1 = 12345678
|
// b1 = 12345678
|
||||||
// b1 >> 4 = 00001234
|
// b1 >> 4 = ____1234
|
||||||
let n1 : number = ((b0 % 4) << 4) + (b1 >> 4);
|
let n1 : number = ((b0 % 4) << 4) + (b1 >> 4);
|
||||||
// n2 = 005678AB
|
// n2 = __5678AB
|
||||||
// b1 = 12345678
|
// b1 = 12345678
|
||||||
// 16 = 00010000
|
// 16 = ___1____
|
||||||
// b1 % 16 = 00005678
|
// b1 % 16 = ____5678
|
||||||
// (b1 % 16) << 2 = 00567800
|
// (b1 % 16) << 2 = __5678__
|
||||||
// b1 = ABCDEFGH
|
// b1 = ABCDEFGH
|
||||||
// b1 >> 6 = 000000AB
|
// b1 >> 6 = ______AB
|
||||||
let n2 : number = ((b1 % 16) << 2) + (b1 >> 6);
|
let n2 : number = ((b1 % 16) << 2) + (b1 >> 6);
|
||||||
// n3 = 00CDEFGH
|
// n3 = 00CDEFGH
|
||||||
// 64 = 01000000
|
// 64 = 01000000
|
||||||
@@ -135,15 +135,88 @@ encode3(bytes: Uint8Array) {
|
|||||||
/**
|
/**
|
||||||
* Encode the final 0, 1, or 2 bytes
|
* Encode the final 0, 1, or 2 bytes
|
||||||
*
|
*
|
||||||
* FIXME: nyi
|
* @internal
|
||||||
*/
|
*/
|
||||||
function
|
function
|
||||||
encode_tail(tail_bytes : Uint8Array,
|
encode_tail(tail_bytes : Uint8Array,
|
||||||
tail_len : number)
|
tail_len : number)
|
||||||
: string
|
: string {
|
||||||
{
|
switch(tail_len) {
|
||||||
throw new Error('nyi');
|
case 0: return '';
|
||||||
|
case 1: return encode1(tail_bytes);
|
||||||
|
case 2: return encode2(tail_bytes);
|
||||||
|
default:
|
||||||
|
throw new Error('encode_tail with tail_len = ' + tail_len);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encode a single byte
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
function
|
||||||
|
encode1(bytes: Uint8Array): string {
|
||||||
|
let b0 : number = bytes[0];
|
||||||
|
// n0 = __ABCDEF
|
||||||
|
// b0 = ABCDEFGH
|
||||||
|
// b0 >> 2 = __ABCDEF
|
||||||
|
let n0 : number = b0 >> 2;
|
||||||
|
// n1 = __GH____
|
||||||
|
// b0 = ABCDEFGH
|
||||||
|
// 4 = _____1__
|
||||||
|
// b0 % 4 = ______GH
|
||||||
|
// (b0 % 4) << 4 = __GH____
|
||||||
|
let n1 : number = (b0 % 4) << 4;
|
||||||
|
|
||||||
|
return int2char(n0) + int2char(n1) + '==';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encode two bytes
|
||||||
|
*
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
function
|
||||||
|
encode2(bytes: Uint8Array): string {
|
||||||
|
return int2char(n0) + int2char(n1) + '==';
|
||||||
|
let b0 : number = bytes[0];
|
||||||
|
let b1 : number = bytes[1];
|
||||||
|
|
||||||
|
// ABCDEFGH 12345678
|
||||||
|
// b0 b1
|
||||||
|
// ABCDEF GH1234 5678__
|
||||||
|
// n0 n1 n2
|
||||||
|
let n0 : number = b0 >> 2;
|
||||||
|
// n1 = __GH1234
|
||||||
|
// b0 = ABCDEFGH
|
||||||
|
// 4 = _____1__
|
||||||
|
// b0 % 4 = ______GH
|
||||||
|
// (b0 % 4) << 4 = __GH____
|
||||||
|
// b1 = 12345678
|
||||||
|
// b1 >> 4 = ____1234
|
||||||
|
let n1 : number = ((b0 % 4) << 4) + (b1 >> 4);
|
||||||
|
// n2 = __5678AB
|
||||||
|
// b1 = 12345678
|
||||||
|
// 16 = ___1____
|
||||||
|
// b1 % 16 = ____5678
|
||||||
|
// (b1 % 16) << 2 = __5678__
|
||||||
|
let n2 : number = (b1 % 16) << 2;
|
||||||
|
|
||||||
|
// convert to chars
|
||||||
|
let s0 : string = int2char(n0);
|
||||||
|
let s1 : string = int2char(n1);
|
||||||
|
let s2 : string = int2char(n2);
|
||||||
|
|
||||||
|
// retrvn
|
||||||
|
return s0 + s1 + s2 + '=';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Conversion table for base64 encode
|
* Conversion table for base64 encode
|
||||||
|
|||||||
Reference in New Issue
Block a user