diff --git a/conversions/int_to_string.c b/conversions/int_to_string.c new file mode 100644 index 00000000..e31af2f9 --- /dev/null +++ b/conversions/int_to_string.c @@ -0,0 +1,81 @@ + +/** + * @file + * @brief Convert integer to string (non-standard function) + */ +#include +#include +#include +#include +#include + +/** + * Converts an integer value to a null-terminated string using the specified + * base and stores the result in the array given by str parameter. + * @param value Value to be converted to a string. + * @param dest Array in memory where to store the resulting null-terminated + * string. + * @param base Numerical base used to represent the value as a string, between 2 + * and 16, where 10 means decimal base, 16 hexadecimal, 8 octal, and 2 binary. + * @returns A pointer to the resulting null-terminated string, same as parameter + * str. + */ +char *int_to_string(int value, char dest[], int base) +{ + const char hex_table[] = {'0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + + int len = 0; + do + { + dest[len++] = hex_table[value % base]; + value /= base; + } while (value != 0); + + /* reverse characters */ + for (int i = 0, limit = len / 2; i < limit; ++i) + { + char t = dest[i]; + dest[i] = dest[len - 1 - i]; + dest[len - 1 - i] = t; + } + dest[len] = '\0'; + return dest; +} + +/** Test function + * @returns `void` + */ +static void test() +{ + const int MAX_SIZE = 100; + for (int i = 1; i <= 100; ++i) + { + char *str1 = (char *)calloc(sizeof(char), MAX_SIZE); + char *str2 = (char *)calloc(sizeof(char), MAX_SIZE); + + /* Generate value from 0 to 100 */ + int value = rand() % 100; + + assert(strcmp(itoa(value, str1, 2), int_to_string(value, str2, 2)) == + 0); + assert(strcmp(itoa(value, str1, 8), int_to_string(value, str2, 8)) == + 0); + assert(strcmp(itoa(value, str1, 10), int_to_string(value, str2, 10)) == + 0); + assert(strcmp(itoa(value, str1, 16), int_to_string(value, str2, 16)) == + 0); + + free(str1); + free(str2); + } +} + +/** Driver Code */ +int main() +{ + /* Intializes random number generator */ + srand(time(NULL)); + test(); + return 0; +}