#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int hexStringToDecimal(char ch);
int decimalToBinary(int num);
char* binaryToBase(char* string);
char* numToBase(int m);
int main(void){
char* hexString = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d";
char* base64
= calloc(n
/ 3, sizeof(char));
int ii = 0;
while(ii < n){
char* bString
= calloc(12, sizeof(char));
//TODO convert string to hex then binary then string again
for (int jj = 0; jj < 3; jj++){
int singleInt = hexStringToDecimal(hexString[ii]);
int binary = decimalToBinary(singleInt);
char buff [4];
ii++;
}
//TODO convert string to base64;
strcat(base64
, binaryToBase
(bString
)); //free(bString);
}
//free(base64);
}
int hexStringToDecimal(char ch){
int singleInt = 0;
if((ch - '0') >= 0 && (ch - '0') <= 9){
singleInt = (ch - '0');
}
else if((ch - 'a') >= 0 && (ch - 'a') <= 5){
singleInt = (ch - 'a') + 10;
}
return singleInt;
}
int decimalToBinary(int num){
int i = 1, binary = 0, remainder;
while(num > 0){
remainder = num % 2;
num /= 2;
binary += remainder * i;
i *= 10;
}
return binary;
}
char* binaryToBase(char* string){
int i = 0;
char* returnString
= calloc(2, sizeof(char)); while(i < 12){
int num = 0;
for (int jj = 5; jj >=0; jj--){
num
+= (string
[i
] - '0') * pow(2, jj
); i++;
}
strcat(returnString
, numToBase
(num
)); }
return returnString;
}
char* numToBase(int m){
char* ch
= calloc(1, sizeof(char)); if(m >= 0 && m <= 25){
*ch = m + 65;
}else if(m >= 26 && m <= 51){
*ch = (m - 26) + 97;
}else if(m >= 52 && m <= 61){
*ch = (m - 52) + 48;
}
return ch;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8bWF0aC5oPgoKaW50IGhleFN0cmluZ1RvRGVjaW1hbChjaGFyIGNoKTsKaW50IGRlY2ltYWxUb0JpbmFyeShpbnQgbnVtKTsKY2hhciogYmluYXJ5VG9CYXNlKGNoYXIqIHN0cmluZyk7CmNoYXIqIG51bVRvQmFzZShpbnQgbSk7CgppbnQgbWFpbih2b2lkKXsKCWNoYXIqIGhleFN0cmluZyA9ICI0OTI3NmQyMDZiNjk2YzZjNjk2ZTY3MjA3OTZmNzU3MjIwNjI3MjYxNjk2ZTIwNmM2OTZiNjUyMDYxMjA3MDZmNjk3MzZmNmU2Zjc1NzMyMDZkNzU3MzY4NzI2ZjZmNmQiOwoJaW50IG4gPSBzdHJsZW4oaGV4U3RyaW5nKTsKICAgIGNoYXIqIGJhc2U2NCA9IGNhbGxvYyhuIC8gMywgc2l6ZW9mKGNoYXIpKTsKICAgIAogICAgaW50IGlpID0gMDsKICAgIHdoaWxlKGlpIDwgbil7CiAgICAgICAgCiAgICAgICAgY2hhciogYlN0cmluZyA9IGNhbGxvYygxMiwgc2l6ZW9mKGNoYXIpKTsKICAgICAgICAKICAgICAgICAvL1RPRE8gY29udmVydCBzdHJpbmcgdG8gaGV4IHRoZW4gYmluYXJ5IHRoZW4gc3RyaW5nIGFnYWluCiAgICAgICAgZm9yIChpbnQgamogPSAwOyBqaiA8IDM7IGpqKyspewoKICAgICAgICAgICAgaW50IHNpbmdsZUludCA9IGhleFN0cmluZ1RvRGVjaW1hbChoZXhTdHJpbmdbaWldKTsKICAgICAgICAgICAgaW50IGJpbmFyeSA9IGRlY2ltYWxUb0JpbmFyeShzaW5nbGVJbnQpOwogICAgICAgICAgICBjaGFyIGJ1ZmYgWzRdOwogICAgICAgICAgICBzcHJpbnRmKGJ1ZmYsICIlMDR1IiwgYmluYXJ5KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIHN0cmNhdChiU3RyaW5nLCBidWZmKTsKICAgICAgICAgICAgaWkrKzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy9UT0RPIGNvbnZlcnQgc3RyaW5nIHRvIGJhc2U2NDsKICAgICAgICBzdHJjYXQoYmFzZTY0LCBiaW5hcnlUb0Jhc2UoYlN0cmluZykpOwogICAgICAgIC8vZnJlZShiU3RyaW5nKTsKICAgIH0KICAgIHByaW50ZigiJXNcbiIsIGJhc2U2NCk7CiAgICAvL2ZyZWUoYmFzZTY0KTsKfQoKaW50IGhleFN0cmluZ1RvRGVjaW1hbChjaGFyIGNoKXsKICAgIAogICAgaW50IHNpbmdsZUludCA9IDA7CiAgICBpZigoY2ggLSAnMCcpID49IDAgJiYgKGNoIC0gJzAnKSA8PSA5KXsKICAgICAgICBzaW5nbGVJbnQgPSAoY2ggLSAnMCcpOwogICAgfQogICAgZWxzZSBpZigoY2ggLSAnYScpID49IDAgJiYgKGNoIC0gJ2EnKSA8PSA1KXsKICAgICAgICBzaW5nbGVJbnQgPSAoY2ggLSAnYScpICsgMTA7CiAgICB9CiAgICByZXR1cm4gc2luZ2xlSW50Owp9CgppbnQgZGVjaW1hbFRvQmluYXJ5KGludCBudW0pewogICAgCiAgICBpbnQgaSA9IDEsIGJpbmFyeSA9IDAsIHJlbWFpbmRlcjsKICAgIHdoaWxlKG51bSA+IDApewogICAgICAgIHJlbWFpbmRlciA9IG51bSAlIDI7CiAgICAgICAgbnVtIC89IDI7CiAgICAgICAgYmluYXJ5ICs9IHJlbWFpbmRlciAqIGk7CiAgICAgICAgaSAqPSAxMDsKICAgIH0KICAgIHJldHVybiBiaW5hcnk7Cn0KCgpjaGFyKiBiaW5hcnlUb0Jhc2UoY2hhciogc3RyaW5nKXsKCiAgICBpbnQgaSA9IDA7CiAgICBjaGFyKiByZXR1cm5TdHJpbmcgPSBjYWxsb2MoMiwgc2l6ZW9mKGNoYXIpKTsKICAgIHdoaWxlKGkgPCAxMil7CiAgICAgICAgaW50IG51bSA9IDA7CiAgICAgICAgZm9yIChpbnQgamogPSA1OyBqaiA+PTA7IGpqLS0pewogICAgICAgICAgICBudW0gKz0gKHN0cmluZ1tpXSAtICcwJykgKiBwb3coMiwgamopOwogICAgICAgICAgICBpKys7CiAgICAgICAgfQogICAgICAgIHN0cmNhdChyZXR1cm5TdHJpbmcsIG51bVRvQmFzZShudW0pKTsKICAgIH0gCiAgICAKICAgIHJldHVybiByZXR1cm5TdHJpbmc7Cn0KCmNoYXIqIG51bVRvQmFzZShpbnQgbSl7ICAKICAgIAogICAgY2hhciogY2ggPSBjYWxsb2MoMSwgc2l6ZW9mKGNoYXIpKTsKICAgIGlmKG0gPj0gMCAmJiBtIDw9IDI1KXsKICAgICAgICAqY2ggPSBtICsgNjU7CiAgICB9ZWxzZSBpZihtID49IDI2ICYmIG0gPD0gNTEpewogICAgICAgICpjaCA9IChtIC0gMjYpICsgOTc7ICAgIAogICAgfWVsc2UgaWYobSA+PSA1MiAmJiBtIDw9IDYxKXsKICAgICAgICAqY2ggPSAobSAtIDUyKSArIDQ4OwogICAgfQogICAgcmV0dXJuIGNoOwp9CgoKCg==