fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. int hexStringToDecimal(char ch);
  7. int decimalToBinary(int num);
  8. char* binaryToBase(char* string);
  9. char* numToBase(int m);
  10.  
  11. int main(void){
  12. char* hexString = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d";
  13. int n = strlen(hexString);
  14. char* base64 = calloc(n / 3, sizeof(char));
  15.  
  16. int ii = 0;
  17. while(ii < n){
  18.  
  19. char* bString = calloc(12, sizeof(char));
  20.  
  21. //TODO convert string to hex then binary then string again
  22. for (int jj = 0; jj < 3; jj++){
  23.  
  24. int singleInt = hexStringToDecimal(hexString[ii]);
  25. int binary = decimalToBinary(singleInt);
  26. char buff [4];
  27. sprintf(buff, "%04u", binary);
  28.  
  29. strcat(bString, buff);
  30. ii++;
  31. }
  32.  
  33. //TODO convert string to base64;
  34. strcat(base64, binaryToBase(bString));
  35. //free(bString);
  36. }
  37. printf("%s\n", base64);
  38. //free(base64);
  39. }
  40.  
  41. int hexStringToDecimal(char ch){
  42.  
  43. int singleInt = 0;
  44. if((ch - '0') >= 0 && (ch - '0') <= 9){
  45. singleInt = (ch - '0');
  46. }
  47. else if((ch - 'a') >= 0 && (ch - 'a') <= 5){
  48. singleInt = (ch - 'a') + 10;
  49. }
  50. return singleInt;
  51. }
  52.  
  53. int decimalToBinary(int num){
  54.  
  55. int i = 1, binary = 0, remainder;
  56. while(num > 0){
  57. remainder = num % 2;
  58. num /= 2;
  59. binary += remainder * i;
  60. i *= 10;
  61. }
  62. return binary;
  63. }
  64.  
  65.  
  66. char* binaryToBase(char* string){
  67.  
  68. int i = 0;
  69. char* returnString = calloc(2, sizeof(char));
  70. while(i < 12){
  71. int num = 0;
  72. for (int jj = 5; jj >=0; jj--){
  73. num += (string[i] - '0') * pow(2, jj);
  74. i++;
  75. }
  76. strcat(returnString, numToBase(num));
  77. }
  78.  
  79. return returnString;
  80. }
  81.  
  82. char* numToBase(int m){
  83.  
  84. char* ch = calloc(1, sizeof(char));
  85. if(m >= 0 && m <= 25){
  86. *ch = m + 65;
  87. }else if(m >= 26 && m <= 51){
  88. *ch = (m - 26) + 97;
  89. }else if(m >= 52 && m <= 61){
  90. *ch = (m - 52) + 48;
  91. }
  92. return ch;
  93. }
  94.  
  95.  
  96.  
  97.  
Success #stdin #stdout 0s 2300KB
stdin
Standard input is empty
stdout
SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t