forked from UrsusPilot/QuadCopterGroundStation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
algorithm_string.c
84 lines (69 loc) · 2.32 KB
/
algorithm_string.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
74
75
76
77
78
79
80
81
82
83
84
/*=====================================================================================================*/
/*=====================================================================================================*/
#include "stm32f4_system.h"
#include "algorithm_string.h"
/*=====================================================================================================*/
/*=====================================================================================================*
**函數 : Str_NumToChar
**功能 : 數值轉字串
**輸入 : Type, NumLen, *CharData, NumData
**輸出 : None
**使用 : Str_NumToChar(Type_O, 6, TrData, Data)
**=====================================================================================================*/
/*=====================================================================================================*/
void Str_NumToChar(u8 Type, u8 NumLen, u8 *CharData, s32 NumData)
{
u8 i = 0;
u32 Tmp[48] = {0};
u32 NumTmp = 1;
switch (Type) {
case Type_B:
case Type_O:
case Type_D:
case Type_H:
for (i = 0; i < NumLen; i++) {
Tmp[i] = ((u32)NumData) / NumTmp;
NumTmp = NumTmp * Type;
}
for (i = 0; i < NumLen; i++) {
CharData[NumLen - i - 1] = Tmp[i] - Tmp[i + 1] * Type;
if (CharData[NumLen - i - 1] > 9)
CharData[NumLen - i - 1] += 55; // 65-10
else
CharData[NumLen - i - 1] += 48;
}
CharData[NumLen] = '\0';
break;
case Type_I:
if (NumData < 0) {
CharData[0] = '-';
NumData = (~NumData) + 1;
for (i = 1; i < NumLen + 1; i++) {
Tmp[i - 1] = ((u32)NumData) / NumTmp;
NumTmp = NumTmp * 10;
}
for (i = 1; i < NumLen + 1; i++) {
CharData[NumLen - i + 1] = Tmp[i - 1] - Tmp[i] * 10;
CharData[NumLen - i + 1] += 48;
}
CharData[NumLen + 1] = '\0';
} else {
CharData[0] = '+';
//NumData = (~NumData) + 1;
for (i = 1; i < NumLen + 1; i++) {
Tmp[i - 1] = ((u32)NumData) / NumTmp;
NumTmp = NumTmp * 10;
}
for (i = 1; i < NumLen + 1; i++) {
CharData[NumLen - i + 1] = Tmp[i - 1] - Tmp[i] * 10;
CharData[NumLen - i + 1] += 48;
}
CharData[NumLen + 1] = '\0';
}
break;
case Type_F:
break;
}
}
/*=====================================================================================================*/
/*=====================================================================================================*/