mirror of
https://github.moeyy.xyz/https://github.com/TheAlgorithms/C.git
synced 2023-10-11 15:56:24 +08:00
int_to_string
This commit is contained in:
parent
ff2e7a3528
commit
313a98085d
81
conversions/int_to_string.c
Normal file
81
conversions/int_to_string.c
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* @brief Convert integer to string (non-standard function)
|
||||||
|
*/
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user