1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C语言sscanf()正则表达式注意及截取字符串 提取数字 转16进制字节数组 超简单

C语言sscanf()正则表达式注意及截取字符串 提取数字 转16进制字节数组 超简单

时间:2020-07-29 20:43:09

相关推荐

C语言sscanf()正则表达式注意及截取字符串 提取数字 转16进制字节数组 超简单

截取字符串

#include <stdio.h>int main(int argc,char** argv){const char* in = "a1b2c3ABCdef 123";char out[100] = {0};sscanf(in,"%3s", out);printf("截取前3个字符:%s\n",out);memset(out,0,sizeof(out));sscanf(in,"%*3s%3s", out);printf("跳过3个字符后截取前3个字符:%s\n",out); memset(out,0,sizeof(out));sscanf(in,"%*[^A]A%3s", out);printf("忽略开头到A字符串,截取前3个字符:%s\n",out);memset(out,0,sizeof(out));sscanf(in,"a%[0-9]b", out); //不是%d哦printf("提取数字:%s\n",out);memset(out,0,sizeof(out));sscanf(in,"a1b2c3%[a-zA-Z]", out); printf("提取小写+大写字母:%s\n",out);return 0;}

%表示选择,%后面的是条件。

比如"%s",s是一个条件,表示任意字符,"%s"的意思是:只要输入的东西是一个字符,就把它拷贝给str。

比如"%3s"又多了一个条件:只拷贝3个字符。

比如“%[a-z]”的条件稍微严格一些,输入的东西不但是字符,还得是一个小写字母的字符。

[]内是匹配的字符,^表示求反集,当遇到非集合内的字符时终止。贪婪算法,即算法可能多的匹配字符。

注意:遇到非匹配项就结束。不处理非匹配项后面的内容。

%* 与%刚好相反,表示过滤满足条件的字符,也就是跳过满足条件的字符,其后一定要有新的%语句,否则无法读入。

注意:遇到非匹配项就结束。不处理非匹配项后面的内容。

scanf()正则表达式的使用 - 橙&子 - 博客园这文章完全错误。

示例

sscanf把16进制src字符串转为16进制数组dest 比如:“1234” 转为 {0x12,0x34}

#include <stdio.h>#include <stdlib.h>#include <string.h>//把16进制src字符串转为16进制数组dest 比如:“1234” {0x12,0x34} 返回长度unsigned int HexStringtoByte(char *dest, char *src){unsigned int i = 0;int j=0;unsigned int length=strlen(src)/2;for (; i < length; i++){sscanf(src + 2 * i, "%02X", &j); //j是4个字节,j来临时中转*(dest+i)=(char)j;}return length;}int main(){unsigned int i;char src[]="123400";unsigned int length=HexStringtoByte(src,src);//转换后放在原数组里,可能存在0x00,转换后长度不能用strlen来求了。for(i=0;i<length;i++){printf("%02X\n",src[i]); //12 34 00}return 0;}

提取数字

#include <stdio.h>#include <stdlib.h>int main(int argc,char** argv){const char* in = "Qualcomm HS-USB Diagnostics 9091 (COM20)";char out[100] = {0};sscanf(in,"Qualcomm HS-USB Diagnostics 9091 (COM%[0-9])", out); //不是%d哦printf("提取数字:%s\n",out);return 0;}

#include <stdio.h>#include <stdlib.h>int getComNum(char *in){char out[100] = {0};sscanf(in,"Qualcomm HS-USB Diagnostics 9091 (COM%[0-9])", out); //不是%d哦return atoi(out);}int main(int argc,char** argv){printf("串口号:%d\n",getComNum("Qualcomm HS-USB Diagnostics 9091 (COM20)"));return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。