
1 /************************************************* 2 *函数功能:根据步长切割字符串 3 *参数str:待分割的字符串 4 *参数step:步长 5 *返回值:返回切割得到的字符串 6 *备注:调用需包含string.h 7 *************************************************/ 8 char *strsplit(char *str,short step){ 9 char bstr[1024] = {0};//转换缓冲区,内存不足可调小 10 static char *str_ptr = NULL; 11 static short idx = 0; 12 13 if(str) {str_ptr = str;idx = 0;} 14 if(idx>strlen(str_ptr)) {return NULL;} 15 strncpy(bstr,str_ptr+idx,step); 16 idx += step; 17 18 return bstr; 19 } 20 21 /************************************************/ 22 //用例:转换16进制字符串 23 /************************************************/ 24 #include <stdio.h> 25 #include <string.h> 26 27 char *strsplit(char *str,short step){ 28 char bstr[1024] = {0};//转换缓冲区 29 static char *str_ptr = NULL; 30 static short idx = 0; 31 32 if(str) {str_ptr = str;idx = 0;} 33 if(idx>strlen(str_ptr)) {return NULL;} 34 strncpy(bstr,str_ptr+idx,step); 35 idx += step; 36 37 return bstr; 38 } 39 40 int main() 41 { 42 char str[] = "00630065006E007400650072002C0061002C0031003200330034003500360023"; 43 char str_tmp[80] = {0}; 44 char *token; 45 46 printf("%s\n",str); 47 48 token = strsplit(str,4); 49 50 while(token != NULL){ 51 char ch[5]={0}; 52 53 sscanf(token,"%X",ch); 54 strcat(str_tmp,ch); 55 token = strsplit(NULL,4); 56 } 57 58 printf("\n%s\n",str_tmp); 59 return 0; 60 }