Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Conditions:
- #if defined _base64_included
- #endinput
- #endif
- #define _base64_included
- // Variables:
- new const LettersTable[] = {
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
- };
- new const Decoder[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 62, 0, 0, 0, 63, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 0, 0,
- 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0
- };
- // Functions:
- /** Funkcja:
- * decode 64
- - string[] Dekoduje ciąg znaków.
- - second_string[] Zapisuje ciąg znaków w string[]
- **/
- stock decode64(const string[], second_string[]) {
- /** Zmienne:
- * SpaceReplacer - zamienia spacje na znaki równości;
- * len - oznacza długość zakodowanego ciągu znaków string[];
- * Position - oznacza pozycję w ciągu znaków;
- **/
- new const SpaceReplacer = '=';
- new len = strlen(string);
- new Position;
- /** Zmienne:
- * i - tworzy zwykłą wartość typu int o wartości zero;
- * char_[2] - oznacza przypisany znak w ciągu do zdekodowania;
- **/
- for(new i = 0 ; i < len ; i++) {
- new char_[2];
- char_[0] = Decoder[string[i++]];
- char_[1] = Decoder[string[i]];
- char_[0] = (char_[0] << 2) | ( (char_[1] >> 4) & 0x3 );
- Position += format(second_string[Position], len, "%c", char_[0]);
- if(++i < len) {
- char_[0] = string[i];
- if(char_[0] == SpaceReplacer)
- break;
- char_[0] = Decoder[string[i]];
- char_[1] = ((char_[1] << 4) & 240) | ((char_[0] >> 2) & 15);
- Position += format(second_string[Position], len, "%c", char_[1]);
- }
- if(++i < len) {
- char_[1] = string[i];
- if(char_[1] == SpaceReplacer)
- break;
- char_[1] = Decoder[string[i]];
- char_[0] = ((char_[0] << 6) & 192) | char_[1];
- Position += format(second_string[Position], len, "%c", char_[0]);
- }
- }
- return true;
- }
- /** Funkcja:
- * encode 64
- - string[] Koduje ciąg znaków.
- - second_string[] Zapisuje ciąg znaków w string[]
- **/
- stock encode64(const string[], second_string[]) {
- /** Zmienne:
- * SpaceReplacer - zamienia spacje na znaki równości;
- * len - oznacza długość zakodowanego ciągu znaków string[];
- * Position - oznacza pozycję w ciągu znaków;
- **/
- new const SpaceReplacer = '=';
- new len = strlen(string);
- new Position;
- /** Zmienne:
- * i - tworzy zwykłą wartość typu int o wartości zero;
- * Character - oznacza przypisany znak w ciągu do zakodowania;
- **/
- for(new i = 0 ; i < len ; i++) {
- new Character;
- Character = (string[i] >> 2) & 63;
- Position += format(second_string[Position], len, "%c", LettersTable[Character]);
- Character = (string[i] << 4) & 63;
- if(++i < len)
- Character |= (string[i] >> 4) & 15;
- Position += format(second_string[Position], len, "%c", LettersTable[Character]);
- if(i < len) {
- Character = (string[i] << 2) & 63;
- if(++i < len)
- Character |= (string[i] >> 6) & 3;
- Position += format(second_string[Position], len, "%c", LettersTable[Character]);
- } else {
- i++;
- Position += format(second_string[Position], len, "%c", SpaceReplacer);
- }
- if(i < len) {
- Character = string[i] & 63;
- Position += format(second_string[Position], len, "%c", LettersTable[Character]);
- }
- else Position += format(second_string[Position], len, "%c", SpaceReplacer);
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement