-
Notifications
You must be signed in to change notification settings - Fork 0
/
char_number_to_string.c
144 lines (119 loc) · 3.62 KB
/
char_number_to_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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/******************************************************************************************
* char_number_to_string.c
* ver2.00
* Hirofumi Hamada
*=========================================================================================
* char型(-128 ~ 127)の数値を文字列へ変換
*
*=========================================================================================
* ・ver1.00 || 初版 || 2015/09/14 || Hirofumi Hamada
* 初版
* ・ver2.00 || 境界値のバグを修正 || 2015/12/15 || Hirofumi Hamada
* 境界値のバグを修正
* ファイル名・関数名の先頭にchar_を追加
*=========================================================================================
* PIC16F886
* MPLAB X IDE
* XC8 Compiler
*=========================================================================================
* Created by fabsat Project(Tokai university Satellite Project[TSP])
*****************************************************************************************/
#include "char_number_to_string.h"
/* prototype of function */
static char *process_100(char num, int *p_flag, char *p_str);
static char *process_10(char num, int *p_flag, char *p_str);
static char *process_1(char num, int *p_flag, char *p_str);
/*=====================================================
* @brief
* char型の数値を文字列へ変換
* @param
* num:変換したい数値
* @return
* str:変換した文字列を格納した配列へのポインタ
* @note
* -128 ~ 127の数値
*===================================================*/
char *char_number_to_string(char num)
{
static char str[5];
int flag = 0;
char *p_error_message = "size of number is over";
/* num == -128 process */
if(num == INT8_T_MINIMUM)
{
str[0] = '-';
str[1] = '1';
str[2] = '2';
str[3] = '8';
str[4] = '\0';
return str;
}
/* For negetive number process */
if(num < 0)
{
str[flag] = '-';
flag++;
num *= (-1);
}
/* converting process */
if(MIN_100 <= num && num <= MAX_100)
{
return process_100(num, &flag, str);
}
else if(MIN_10 <= num && num <= MAX_10)
{
return process_10(num, &flag, str);
}
else if(MIN_1 <= num && num <= MAX_1)
{
return process_1(num, &flag, str);
}
else
{
return p_error_message;
}
}
/*-----------------------------------------
* 100の位を文字へ変換
*--------------------------------------*/
static char *process_100(char num, int *p_flag, char *p_str)
{
char remainder_100 = num % 100;
p_str[*p_flag] = ASCII_CODE_0 + 1;
(*p_flag)++;
return process_10(remainder_100, p_flag, p_str);
}
/*-----------------------------------------
* 10の位を文字へ変換
*--------------------------------------*/
static char *process_10(char num, int *p_flag, char *p_str)
{
int divide_10 = (int)(num / 10);
char remainder_10 = num % 10;
char val = ASCII_CODE_0;
int i;
for(i = 0; i < divide_10; i++)
{
val++;
}
p_str[*p_flag] = val;
(*p_flag)++;
return process_1(remainder_10, p_flag, p_str);
}
/*-----------------------------------------
* 1の位を文字へ変換
*--------------------------------------*/
static char *process_1(char num, int *p_flag, char *p_str)
{
int divide_1 = (int)num;
char val = ASCII_CODE_0;
int i;
for(i = 0; i < divide_1; i++)
{
val++;
}
p_str[*p_flag] = val;
(*p_flag)++;
p_str[*p_flag] = '\0';
return p_str;
}