-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlarge_num.c
73 lines (62 loc) · 1.48 KB
/
large_num.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#define MAX_ATTR_LEN 60
uint64_t atoi_large(const char *src)
{
uint64_t res = 0;
const char *p = src;
if (!src)
return 0;
while (p) {
if (*p <= '9' && *p >= '0')
res = res*10 + *p - '0';
else
break;
p++;
}
return res;
}
static int size_tune(char *dest, uint64_t src)
{
float size;
if (!dest)
return 0;
if (src/1024/1024/1024/1024/1024){
size = src/1024/1024;
size = size/1024/1024/1024;
snprintf(dest, MAX_ATTR_LEN, "%.2fPB", size);
}
else if (src/1024/1024/1024/1024) {
size = src/1024;
size = size/1024/1024/1024;
snprintf(dest, MAX_ATTR_LEN, "%.2fTB", size);
}
else if (size = src/1024/1024/1024) {
size = src/1024/1024;
size = size/1024;
snprintf(dest, MAX_ATTR_LEN, "%.2fGB", size);
}
else if (size = src/1024/1024)
snprintf(dest, MAX_ATTR_LEN, "%luMB", size);
else if (size = src/1024)
snprintf(dest, MAX_ATTR_LEN, "%luKB", size);
else
snprintf(dest, MAX_ATTR_LEN, "%luB", src);
return 1;
}
void main()
{
char size[64] = {0};
uint64_t i;
strcpy(size, "34900053480830299900"); //3TB
i = atoi_large(size);
printf("%s: %lu --> ", size, i);
size_tune(size, i);
printf("%s\n", size);
strcpy(size, "2250468753408"); //2TB
i = atoi_large(size);
printf("%s: %lu --> ", size, i);
size_tune(size, i);
printf("%s\n", size);
}