Hex converter

This commit is contained in:
kdeng00
2020-10-12 21:12:51 -04:00
parent ae52c8d321
commit 60d4d83055
+86 -16
View File
@@ -22,6 +22,9 @@
char hex_value[15];
// Rudimentary and simple mathematical power function
long rudy_pow(long value, int power);
// Return values
// 0 - Invalid
// 1 - Converting to hex
@@ -45,9 +48,11 @@ int size_of_string(char *value);
// 1 - Equal
int compare_string(char *first, char *second);
// Converts the hex value to a number
int hex_conveted_to_number(char *value);
// Converts the hex part value to a number
int hex_converted_to_number(char *value);
// Converts the hex part value to a number
int hex_part_to_number(char hex_part);
// Converts the number to a hex value
char* number_converted_to_hex(char *value);
@@ -104,7 +109,13 @@ int main(int argc, char **argv)
if (is_valid_source(val, NUMBER) != 1)
{
printf("%s is not a valid hex number\n", val);
return -1;
}
int converted_to_number = hex_converted_to_number(val);
printf("%s coverted to a number is %d\n", val, converted_to_number);
break;
case INVALID:
printf("%s is an invalid conversion target\n", conversion_target);
@@ -118,6 +129,26 @@ int main(int argc, char **argv)
}
long rudy_pow(long value, int power)
{
if (power > 2)
{
return value * rudy_pow(value, --power);
}
else if (power == 2)
{
return value * value;
}
else if (power == 1)
{
return value;
}
else
{
return 1;
}
}
int is_valid_conversion_target(char *target)
{
@@ -211,13 +242,65 @@ int compare_string(char *first, char *second)
return result;
}
int hex_conveted_to_number(char *value)
int hex_converted_to_number(char *value)
{
int number = 0;
int power = 0;
int string_size = size_of_string(value);
// printf("String size of %s is %d\n", value, string_size);
for (int i = (string_size - 1); i >= 0; --i)
{
char hex_part = value[i];
int number_part = hex_part_to_number(hex_part);
int powered = rudy_pow(16, power);
// printf("16 to the %d power is %d\n", power, powered);
number += number_part * rudy_pow(16, power);
printf("hex part %c equals %d\n", hex_part, number_part);
++power;
}
return number;
}
int hex_part_to_number(char hex_part)
{
int result = 0;
if (hex_part == 'f' || hex_part == 'F')
{
result = 15;
}
else if (hex_part == 'e' || hex_part == 'E')
{
result = 14;
}
else if (hex_part == 'd' || hex_part == 'D')
{
result = 13;
}
else if (hex_part == 'c' || hex_part == 'C')
{
result = 12;
}
else if (hex_part == 'b' || hex_part == 'B')
{
result = 11;
}
else if (hex_part == 'a' || hex_part == 'A')
{
result = 10;
}
else
{
result = hex_part - '0';
}
return result;
}
char *number_converted_to_hex(char *value)
{
@@ -261,19 +344,6 @@ char *number_converted_to_hex(char *value)
reverse_order(hex_value);
}
/**
for (int i = (string_size - 1); i >= 0; --i)
{
int number_part = value[i] - '0';
printf("Number part %d\n", number_part);
++hex_start;
}
*/
return hex_value;
}