yy1717
2022-12-08 f7a18ec4494b9c5c9ef3fd440bbf68ffc6425e18
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
//
// Created by YY on 2019/12/23.
//
 
#include "num.h"
#include <sstream>
#include <iosfwd>
#include <iomanip>
 
using namespace std;
 
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;
}
 
int BitCount(uint32_t n)
{
    n = (n &0x55555555) + ((n >>1) &0x55555555);
    n = (n &0x33333333) + ((n >>2) &0x33333333);
    n = (n &0x0f0f0f0f) + ((n >>4) &0x0f0f0f0f);
    n = (n &0x00ff00ff) + ((n >>8) &0x00ff00ff);
    n = (n &0x0000ffff) + ((n >>16) &0x0000ffff);
 
    return n ;
}
 
double round(double number, unsigned int bits) {
    stringstream ss;
    ss << setiosflags(ios::fixed) << setprecision(bits) << number;
    ss >> number;
    return number;
}
 
string intw(int n, int w)
{
    stringstream ss;
 
    ss << setfill('0') << setw(w) << n;
 
    return ss.str();
}