yy1717
2020-01-07 03e19b8cdea0ddd28da1a1738c5b62f7f97cd2e0
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
74
75
76
//
// Created by YY on 2019/12/23.
//
 
#include "num.h"
 
long str2int(const uint8_t *s, uint16_t length)
{
    uint16_t i;
    long n = 0;
    bool sign = false;
 
    for(i = 0; i < length; i++)
    {
 
        if(s[i] >= '0' && s[i] <= '9') {
            n = n*10 + s[i] - '0';
        } else if (i == 0 && s[i]=='-') {
            sign = true;
        }
    }
 
    if (sign) {
        n = 0-n;
    }
 
    return n;
}
 
bool str2float(double *f, const uint8_t *s, uint16_t length)
{
    bool sign = false;
    bool getDecimal = false;
    uint16_t i;
    uint64_t m = 0, n = 1;
    double x;
 
    *f = 0.0;
 
    for(i = 0; i < length; i++)
    {
        if(s[i] == '-' || s[i] == '+') {
            if(i == 0) {
                if (s[i] == '-') {
                    sign = true;
                }
            }
            else {
                return false;
            }
        }
        else if(s[i] == '.') {
            if(getDecimal == true) {
                return false;
            }
            getDecimal = true;
        }
        else if(s[i] >= '0' && s[i] <= '9') {
            m = m*10 + s[i] - '0';
            if(getDecimal == true) {
                n *= 10;
            }
        }
        else {
            return false;
        }
    }
 
    x = (double)m / (double)n;
    if(sign) {
        x = 0.0 - x;
    }
    *f = x;
 
    return true;
}