进制转换: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 }
浙公网安备 33010602011771号