libcfe  0.12.1
some useful C-functions
char_to_int.c
Go to the documentation of this file.
1 #include "config.h"
2 #include "char_to_int.h"
3 
4 #include <stdio.h>
5 
6 #include "len.h"
7 
8 short int check_int(const char *s, int len, uint8_t base)
9 {
10  if(s == NULL) return 0;
11  char digits[] = "0123456789aAbBcCdDeEfF";
12  if(base == 16) base += 6;
13  int i;
14  for(i = 0; i < len; i++)
15  {
16  if(_len(digits, s[i]) <= base)
17  continue;
18  else
19  return 0;
20  }
21  return 1;
22 }
23 
24 unsigned long long char_to_int(const char *s, int i, uint8_t base)
25 {
26  if(s == NULL)
27  return -1;
28  if(i == 0)
29  i = str_len(s);
30  if(i == 0)
31  return -1;
32 
33  unsigned long long n = 0;
34  unsigned long long b = 1;
35 
36  for(i -= 1; i >= 0; i--)
37  {
38  switch(s[i])
39  {
40  case '0': break;
41  case '1': n += b; break;
42  case '2': n += 2 * b; break;
43  case '3': n += 3 * b; break;
44  case '4': n += 4 * b; break;
45  case '5': n += 5 * b; break;
46  case '6': n += 6 * b; break;
47  case '7': n += 7 * b; break;
48  case '8': n += 8 * b; break;
49  case '9': n += 9 * b; break;
50  case 'a':
51  case 'A': n += 10 * b; break;
52  case 'b':
53  case 'B': n += 11 * b; break;
54  case 'c':
55  case 'C': n += 12 * b; break;
56  case 'd':
57  case 'D': n += 13 * b; break;
58  case 'e':
59  case 'E': n += 14 * b; break;
60  case 'f':
61  case 'F': n += 15 * b; break;
62  default: break;
63  }
64  b *= base;
65  }
66  return n;
67 }
int _len(const char *s, char m)
Definition: len.c:8
#define str_len(s)
Shorthand for counting &#39;\0&#39; terminating strings. See _len for more info.
Definition: len.h:17
unsigned long long char_to_int(const char *s, int i, uint8_t base)
Definition: char_to_int.c:24
short int check_int(const char *s, int len, uint8_t base)
Definition: char_to_int.c:8