forked from KolibriOS/kolibrios
Addition new function base64_encode
git-svn-id: svn://kolibrios.org@7944 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
63b9f19b26
commit
e43264a49a
59
programs/cmm/lib/base64.h
Normal file
59
programs/cmm/lib/base64.h
Normal file
@ -0,0 +1,59 @@
|
||||
/* Author: PaulCodeman
|
||||
Example:
|
||||
char bufferb64[0x1000] = {0};
|
||||
base64_encode("Kevin van Zonneveld",#bufferb64, 19);
|
||||
#bufferb64 == "S2V2aW4gdmFuIFpvbm5ldmVsZA=="
|
||||
*/
|
||||
|
||||
:dword b64_symbols = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||||
inline void base64_encode(dword data, buffer, length)
|
||||
{
|
||||
byte o1 = 0;
|
||||
byte o2 = 0;
|
||||
byte o3 = 0;
|
||||
dword bits = 0;
|
||||
dword h1 = 0;
|
||||
dword h2 = 0;
|
||||
dword h3 = 0;
|
||||
dword h4 = 0;
|
||||
|
||||
dword end = 0;
|
||||
end = data+length;
|
||||
|
||||
do
|
||||
{
|
||||
o1 = DSBYTE[data];data++;
|
||||
if (data < end) {o2 = DSBYTE[data];data++;} else o2 = 0;
|
||||
if (data < end) {o3 = DSBYTE[data];data++;} else o3 = 0;
|
||||
|
||||
bits = o1<<16;
|
||||
bits |= o2<<8;
|
||||
bits |= o3;
|
||||
|
||||
h1 = bits>>18 & 0x3f;
|
||||
h2 = bits>>12 & 0x3f;
|
||||
h3 = bits>>6 & 0x3f;
|
||||
h4 = bits & 0x3f;
|
||||
|
||||
DSBYTE[buffer] = DSBYTE[#b64_symbols+h1];buffer++;
|
||||
DSBYTE[buffer] = DSBYTE[#b64_symbols+h2];buffer++;
|
||||
DSBYTE[buffer] = DSBYTE[#b64_symbols+h3];buffer++;
|
||||
DSBYTE[buffer] = DSBYTE[#b64_symbols+h4];buffer++;
|
||||
} while(end > data);
|
||||
switch(length % 3)
|
||||
{
|
||||
case 1:
|
||||
buffer--;
|
||||
DSBYTE[buffer] = '=';
|
||||
buffer--;
|
||||
DSBYTE[buffer] = '=';
|
||||
buffer+=2;
|
||||
break;
|
||||
case 2:
|
||||
buffer--;
|
||||
DSBYTE[buffer] = '=';
|
||||
buffer++;
|
||||
break;
|
||||
}
|
||||
DSBYTE[buffer] = 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user