libcfe  0.12.1
some useful C-functions
int_to_char.c
Go to the documentation of this file.
1 #include "config.h"
2 #include "int_to_char.h"
3 
4 #include "int_size.h"
5 
6 #ifndef MAX
7 # define MAX(a, b) (((a) > (b)) ? (a) : (b))
8 #endif
9 
10 static char digits[] = "0123456789ABCDEF";
11 
12 size_t int_to_char(long long i, char **s, unsigned int min_len, uint8_t base)
13 {
14  unsigned short neg = 0;
15  if(i < 0)
16  {
17  neg = 1;
18  i *= -1;
19  }
20  size_t len = (size_t)MAX((unsigned int)int_size(i, base) + neg, min_len);
21  int j = (int)len - 1;
22  *s = malloc(len + 1);
23  (*s)[len] = '\0';
24 
25  while(j >= 0)
26  {
27  (*s)[j--] = digits[i % base];
28  i = (i - (i % base)) / base;
29  }
30  if(neg == 1)
31  (*s)[0] = '-';
32 
33  return len;
34 }
35 
36 size_t int_to_char_with_decimal(long long i, char **s, uint8_t num)
37 {
38  size_t len;
39  uint8_t n;
40  len = int_to_char(i, s, num + 1, 10);
41  *s = (char *)realloc(*s, len + 2);
42  for(n = 0; n < num; n++)
43  (*s)[len - n] = (*s)[len - 1 - n];
44  (*s)[len - num] = '.';
45  (*s)[len + 1] = '\0';
46  return len + 1;
47 }
size_t int_size(unsigned long long i, unsigned int base)
Definition: int_size.c:4
size_t int_to_char_with_decimal(long long i, char **s, uint8_t num)
Definition: int_to_char.c:36
#define MAX(a, b)
Definition: int_to_char.c:7
size_t int_to_char(long long i, char **s, unsigned int min_len, uint8_t base)
Definition: int_to_char.c:12