Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Amon Guinan
- //Some sections use techniques that were either inspired by or taken from other sources.
- #include <stdio.h>
- #include <string.h>
- #include <cs50.h>
- //Function converts letters (eg.hex, etc...) to ints
- int deHex(char letter)
- {
- if (letter>='0' && letter<='9')
- {
- return ((int)letter-'0');
- }
- else
- {
- return ((int)letter-'A'+10);
- }
- }
- int toBase10(char *input, int base)// Convert value from target base to base 10.
- {
- int num = 0;
- int input_length = strlen(input);
- int power = 1;
- for (int counter = input_length - 1; counter >= 0; counter--)
- {
- if (deHex(input[counter]) >= base)
- {
- printf("toBase10 Failure: Invalid Input.");
- //exit(1);
- }
- num += deHex(input[counter]) * power;
- power = power * base;
- }
- return num;
- }
- //Reverse of deHex function, converts ints to letters
- char hex(int value)
- {
- if (value>=0 && value<=9)
- {
- return (char)(value+'0');
- }
- else
- {
- return ((char)(value-10+'A'));
- }
- }
- // Reverses a string. Required when converting from decimal to other bases.
- void reverse(char *input_string)
- {
- int string_length = strlen(input_string);
- int counter;
- char temp;
- for (counter = 0; counter < (string_length/2); counter++)
- {
- temp = input_string[counter];
- input_string[counter] = input_string[string_length-counter-1];
- temp = input_string[string_length-counter-1];
- }
- }
- char* fromDeci(char string_output[], int base, int input)
- //Converts number from base 10 to other base. Char array declared in main due to implementation issues.
- {
- int string_index = 0;
- while (input > 0)
- {
- string_output[string_index] = hex(input % base);
- input /= base;
- string_index++;
- }
- string_output[string_index] = '\0';
- reverse(string_output);
- return string_output;
- }
- int main(void)
- {
- string input_string = get_string("Input value>");
- int start_base = get_int("Input initial base>");
- int end_base = get_int("Input target base>");
- char output_string[100];
- printf("Value %s in base %d is"
- " %s.\n", input_string, end_base, fromDeci(output_string,end_base,toBase10(input_string, start_base)));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement