嵌入式AIoT君

我是一名嵌入式-人工智能小白,从入门到出师,开始我的新一段征程。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

进制转换:16进制转10进制代码

svx_str.h

 1 #ifndef __SVX_STR_H
 2 #define __SVX_STR_H 1
 3 
 4 #include <stdint.h>
 5 #include <sys/types.h>
 6 
 7 #ifdef __cplusplus
 8 extern "C" {
 9 #endif
10 
11 uint32_t svx_str_tirm(char *str);
12 uint32_t svx_str_split(char *str, char c, char *str1, size_t len1, char *str2, size_t len2);
13 uint32_t svx_str_suffix_dateandtime(const char *src_str, char *des_str, unsigned int des_size);
14 
15 uint32_t svx_str_to_uint8(char *str, uint8_t *i);
16 uint32_t svx_str_to_int8(char *str, int8_t *i);
17 uint32_t svx_str_to_uint16(char *str, uint16_t *i);
18 uint32_t svx_str_to_int16(char *str, int16_t *i);
19 uint32_t svx_str_to_uint32(char *str, uint32_t *i);
20 uint32_t svx_str_to_int32(char *str, int32_t *i);
21 uint32_t svx_str_to_uint64(char *str, uint64_t *i);
22 uint32_t svx_str_to_int64(char *str, int64_t *i);
23 
24 #ifdef __cplusplus
25 }
26 #endif
27 
28 #endif

 

svx_str.c

  1 #include <ctype.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 #include <limits.h>
  5 #include <stdint.h>
  6 #include <time.h>
  7 #include <errno.h>
  8 #include "svx_str.h"
  9 
 10 uint32_t svx_str_tirm(char *str)
 11 {
 12     size_t  len  = 0;
 13     char   *head = NULL;
 14     char   *tail = NULL;
 15 
 16     if(NULL == str)    return 1;
 17     if('\0' == (*str)) return 0;
 18 
 19     len  = strlen(str);
 20     head = str;
 21     tail = str + len - 1;
 22 
 23     /* find head */
 24     while(*head && isspace(*head))
 25         head++;
 26     if(!(*head))
 27     {
 28         *str = '\0';
 29         return 0;
 30     }
 31 
 32     /* find tail */
 33     while(head != tail && isspace(*tail))
 34         tail--;
 35 
 36     /* get length */
 37     len = tail - head + 1;
 38 
 39     /* cut string */
 40     if(head == str)
 41         *(str + len) = '\0';
 42     else
 43     {
 44         memmove(str, head, len);
 45         *(str + len) = '\0';
 46     }
 47 
 48     return 0;
 49 }
 50 
 51 uint32_t svx_str_suffix_dateandtime(const char *src_str, char *des_str, unsigned int des_size)
 52 {
 53     time_t t = time(0);
 54     struct tm *tt;
 55     char *fmt =(char *)malloc(strlen(src_str)+25);
 56     if(fmt == NULL)
 57         return 1;
 58     if( des_size < (strlen(src_str) + 25) )
 59         return 1;
 60 
 61     memset(fmt,0,strlen(src_str)+25);
 62     strcat(fmt, src_str);
 63     strcat(fmt,"_%Y-%m-%d_%H-%M-%S");
 64 
 65     time(&t);
 66     tt = localtime(&t);
 67     strftime(des_str, strlen(src_str)+25, fmt,tt);
 68     free(fmt);
 69     return 0;
 70 }
 71 
 72 uint32_t svx_str_split(char *str, char c, char *str1, size_t len1, char *str2, size_t len2)
 73 {
 74     char *p;
 75 
 76     if(NULL == str || NULL == str1 || 0 == len1 || NULL == str2 || 0 == len2) return 1;
 77 
 78     /* find char c */
 79     p = str;
 80     while(*p && *p != c)
 81         p++;
 82     if(!(*p))
 83         return 1;
 84 
 85     *p = '\0';
 86     strncpy(str1, str, len1);
 87 
 88     p++;
 89     strncpy(str2, p, len2);
 90 
 91     return 0;
 92 }
 93 
 94 uint32_t svx_str_to_uint8(char *str, uint8_t *i)
 95 {
 96     unsigned long tmp;
 97 
 98     if(NULL == str) return 1;
 99 
100     tmp = strtoul(str, (char **)NULL, 10);
101 
102     if((EINVAL == errno && 0 == tmp) ||
103        (ERANGE == errno && ULONG_MAX == tmp) ||
104        (tmp > UINT8_MAX))
105         return 1;
106 
107     *i = (uint8_t)tmp;
108     return 0;
109 }
110 
111 uint32_t svx_str_to_int8(char *str, int8_t *i)
112 {
113     long tmp;
114 
115     if(NULL == str) return 1;
116 
117     tmp = strtol(str, (char **)NULL, 10);
118 
119     if((EINVAL == errno && 0 == tmp) ||
120        (ERANGE == errno && (LONG_MIN == tmp || LONG_MAX == tmp)) ||
121        (tmp > INT8_MAX || tmp < INT8_MIN))
122         return 1;
123 
124     *i = (int8_t)tmp;
125     return 0;
126 }
127 
128 uint32_t svx_str_to_uint16(char *str, uint16_t *i)
129 {
130     unsigned long tmp;
131 
132     if(NULL == str) return 1;
133 
134     tmp = strtoul(str, (char **)NULL, 10);
135 
136     if((EINVAL == errno && 0 == tmp) ||
137        (ERANGE == errno && ULONG_MAX == tmp) ||
138        (tmp > UINT16_MAX))
139         return 1;
140 
141     *i = (uint16_t)tmp;
142     return 0;
143 }
144 
145 uint32_t svx_str_to_int16(char *str, int16_t *i)
146 {
147     long tmp;
148 
149     if(NULL == str) return 1;
150 
151     tmp = strtol(str, (char **)NULL, 10);
152 
153     if((EINVAL == errno && 0 == tmp) ||
154        (ERANGE == errno && (LONG_MIN == tmp || LONG_MAX == tmp)) ||
155        (tmp > INT16_MAX || tmp < INT16_MIN))
156         return 1;
157 
158     *i = (int16_t)tmp;
159     return 0;
160 }
161 
162 uint32_t svx_str_to_uint32(char *str, uint32_t *i)
163 {
164     unsigned long tmp;
165 
166     if(NULL == str) return 1;
167 
168     tmp = strtoul(str, (char **)NULL, 10);
169 
170     if((EINVAL == errno && 0 == tmp) ||
171        (ERANGE == errno && ULONG_MAX == tmp) ||
172        (tmp > UINT32_MAX))
173         return 1;
174 
175     *i = (uint32_t)tmp;
176     return 0;
177 }
178 
179 uint32_t svx_str_to_int32(char *str, int32_t *i)
180 {
181     long tmp;
182 
183     if(NULL == str) return 1;
184 
185     tmp = strtol(str, (char **)NULL, 10);
186 
187     if((EINVAL == errno && 0 == tmp) ||
188        (ERANGE == errno && (LONG_MIN == tmp || LONG_MAX == tmp)) ||
189        (tmp > INT32_MAX || tmp < INT32_MIN))
190         return 1;
191 
192     *i = (int32_t)tmp;
193     return 0;
194 }
195 
196 uint32_t svx_str_to_uint64(char *str, uint64_t *i)
197 {
198     unsigned long long tmp;
199 
200     if(NULL == str) return 1;
201 
202     tmp = strtoull(str, (char **)NULL, 10);
203 
204     if((EINVAL == errno && 0 == tmp) ||
205        (ERANGE == errno && UINT64_MAX == tmp) ||
206        (tmp > UINT64_MAX))
207         return 1;
208 
209     *i = (uint64_t)tmp;
210     return 0;
211 }
212 
213 uint32_t svx_str_to_int64(char *str, int64_t *i)
214 {
215     long long tmp;
216 
217     if(NULL == str) return 1;
218 
219     tmp = strtoll(str, (char **)NULL, 10);
220 
221     if((EINVAL == errno && 0 == tmp) ||
222        (ERANGE == errno && (INT64_MIN == tmp || INT64_MAX == tmp)) ||
223        (tmp > INT64_MAX || tmp < INT64_MIN))
224         return 1;
225 
226     *i = (int64_t)tmp;
227     return 0;
228 }

 

posted on 2023-04-10 23:51  孔实  阅读(14)  评论(0)    收藏  举报