JZsdk_string.c
5.6 KB
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
#include <stdio.h>
#include <string.h>
#include "JZsdk_string.h"
#include "../../JZsdkLib.h"
/*
* 用于字符串转int型
*/
int JZsdk_String_str_to_int(const char *str)
{
int temp = 0;
const char *ptr = str; //ptr保存str字符串开头
if (*str == '-' || *str == '+') //如果第一个字符是正负号,
{ //则移到下一个字符
str++;
}
while(*str != 0)
{
if ((*str < '0') || (*str > '9')) //如果当前字符不是数字
{ //则退出循环
break;
}
temp = temp * 10 + (*str - '0'); //如果当前字符是数字则计算数值
str++; //移到下一个字符
}
if (*ptr == '-') //如果字符串是以“-”开头,则转换成其相反数
{
temp = -temp;
}
return temp;
}
/*
* int型转字符串
*/
void JZsdk_String_int_to_str(int n, char *str)
{
char buf[10] = "";
int i = 0;
int len = 0;
int temp = n < 0 ? -n: n; // temp为n的绝对值
if (str == NULL)
{
return;
}
while(temp)
{
buf[i++] = (temp % 10) + '0'; //把temp的每一位上的数存入buf
temp = temp / 10;
}
len = n < 0 ? ++i: i; //如果n是负数,则多需要一位来存储负号
str[i] = 0; //末尾是结束符0
while(1)
{
i--;
if (buf[len-i-1] ==0)
{
break;
}
str[i] = buf[len-i-1]; //把buf数组里的字符拷到字符串
}
if (i == 0 )
{
str[i] = '-'; //如果是负数,添加一个负号
}
}
/*
* longlong型转字符串型
*/
size_t JZsdk_String_longlong_to_str(char *s, long long value,int radix)
{
char *p, aux;
unsigned long long v;
size_t l;
/* Generate the string representation, this method produces
* an reversed string. */
v = (value < 0) ? -value : value;
p = s;
do {
*p++ = '0' + (v % radix); // 2
v /= radix; // 2
} while (v);
if (value < 0) *p++ = '-';
/* Compute length and add null term. */
l = p - s;
*p = '\0';
/* Reverse the string. */
p--;
while (s < p) {
aux = *s;
*s = *p;
*p = aux;
s++;
p--;
}
return l;
}
/****************
*
* 用于判断数组是否为空
* 不为空 JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE
* 空 JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS
* ***********/
T_JZsdkReturnCode JZsdk_Array_isEmpty(unsigned char array[], int size)
{
for (int i = 0; i < size; i++) {
if (array[i] != 0) {
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; // 数组不为空
}
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; // 数组为空
}
/****************
*
* 用于替换数组中的换行符'\n'为结束符'\0'
*
* 替换成功返回 JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS
* 没有替换 返回JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE
* ***********/
T_JZsdkReturnCode JZsdk_replace_newlines_with_null_terminator(char* string)
{
int replace_flag = JZ_FLAGCODE_OFF;
// 获取字符串的长度
int length = strlen(string);
// 遍历字符串,将换行符替换为结束符
for (int i = 0; i < length; i++) {
if (string[i] == '\n') {
string[i] = '\0';
replace_flag = JZ_FLAGCODE_ON;
}
}
if (replace_flag == JZ_FLAGCODE_ON)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
else
{
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
}
/****************
*
* 用于将两位u8的数据逆向合并为u16的数据
*
* 成功返回 JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS
* 失败 返回JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE
* ***********/
T_JZsdkReturnCode JZsdk_Merge_U8_to_U16_byReverse(U8_t *in_str, int in_str_len, U16_t *out_str, int *out_str_len)
{
// 检查输入长度是否是2的倍数
if (in_str_len % 2 != 0)
{
// 输入长度不是偶数,处理错误
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
// 检查函数地址
if(in_str == NULL || out_str == NULL)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
int Step = 0;
for (int i = 0; i < in_str_len; i += 2)
{
// 两字节合并为一个16位的整数,注意高低位的顺序
out_str[Step++] = ((U16_t)in_str[i+1] << 8) | in_str[i];
}
// 设置输出字符串的长度为输入长度的一半
*out_str_len = in_str_len / 2;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
/****************
*
* 用于将两位u8的数据正向合并为u16的数据
*
* 成x功返回 JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS
* 失败 返回JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE
* ***********/
T_JZsdkReturnCode JZsdk_Merge_U8_to_U16_byForward(U8_t *in_str, int in_str_len, U16_t *out_str, int *out_str_len)
{
// 检查输入长度是否是2的倍数
if (in_str_len % 2 != 0)
{
// 输入长度不是偶数,处理错误
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
// 检查函数地址
if (in_str == NULL || out_str == NULL)
{
return JZ_ERROR_SYSTEM_MODULE_CODE_INVALID_PARAMETER;
}
int Step = 0;
for (int i = 0; i < in_str_len; i += 2)
{
// 两字节合并为一个16位的整数,注意高低位的顺序
out_str[Step++] = ((U16_t)in_str[i+1] << 8) | in_str[i];
}
// 设置输出字符串的长度为输入长度的一半
*out_str_len = in_str_len / 2;
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}