Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. //Amon Guinan
  2. //Some sections use techniques that were either inspired by or taken from other sources.
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <cs50.h>
  6.  
  7. //Function converts letters (eg.hex, etc...) to ints
  8. int deHex(char letter)
  9. {
  10. if (letter>='0' && letter<='9')
  11. {
  12. return ((int)letter-'0');
  13. }
  14. else
  15. {
  16. return ((int)letter-'A'+10);
  17. }
  18. }
  19.  
  20.  
  21. int toBase10(char *input, int base)// Convert value from target base to base 10.
  22. {
  23. int num = 0;
  24. int input_length = strlen(input);
  25. int power = 1;
  26.  
  27. for (int counter = input_length - 1; counter >= 0; counter--)
  28. {
  29. if (deHex(input[counter]) >= base)
  30. {
  31. printf("toBase10 Failure: Invalid Input.");
  32. //exit(1);
  33. }
  34.  
  35. num += deHex(input[counter]) * power;
  36. power = power * base;
  37. }
  38.  
  39. return num;
  40. }
  41.  
  42. //Reverse of deHex function, converts ints to letters
  43. char hex(int value)
  44. {
  45. if (value>=0 && value<=9)
  46. {
  47. return (char)(value+'0');
  48. }
  49. else
  50. {
  51. return ((char)(value-10+'A'));
  52. }
  53. }
  54.  
  55. // Reverses a string. Required when converting from decimal to other bases.
  56. void reverse(char *input_string)
  57. {
  58. int string_length = strlen(input_string);
  59. int counter;
  60. char temp;
  61. for (counter = 0; counter < (string_length/2); counter++)
  62. {
  63. temp = input_string[counter];
  64. input_string[counter] = input_string[string_length-counter-1];
  65. temp = input_string[string_length-counter-1];
  66. }
  67. }
  68.  
  69. char* fromDeci(char string_output[], int base, int input)
  70. //Converts number from base 10 to other base. Char array declared in main due to implementation issues.
  71. {
  72. int string_index = 0;
  73. while (input > 0)
  74. {
  75. string_output[string_index] = hex(input % base);
  76. input /= base;
  77. string_index++;
  78. }
  79. string_output[string_index] = '\0';
  80. reverse(string_output);
  81.  
  82. return string_output;
  83. }
  84.  
  85. int main(void)
  86. {
  87. string input_string = get_string("Input value>");
  88. int start_base = get_int("Input initial base>");
  89. int end_base = get_int("Input target base>");
  90. char output_string[100];
  91. printf("Value %s in base %d is"
  92. " %s.\n", input_string, end_base, fromDeci(output_string,end_base,toBase10(input_string, start_base)));
  93.  
  94. return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement