STM32G431学习笔记(四)之sscanf()的使用

sscanf 函数用于从字符串中提取数据。

sscanf 函数支持多种格式说明符,例如:

  • *:表示匹配但是不显示/不读入。
  • %s:用于提取字符串。
  • %d:用于提取整数。
  • %f:用于提取浮点数。
  • %[^a]:用于提取指定字符集以外的字符串。
  • %[a-z]:用于提取仅包含小写字母的字符串。

此外,sscanf 函数还支持集合操作,例如贪婪性匹配(尽可能多的匹配)和跳过某些数据。

sscanf 函数的返回值表示成功匹配和赋值的个数,sscanf()函数如果在遇到不符合描述规则时就会结束解析、返回 EOF,而不是从整个字符串中提取出符合规则的部分。

例如:

void uart_rx_proc()
{
	if(rx_pointer>0)
	{
		if(rx_pointer==22)//接收的处理
		{
			sscanf(rxdata,"%4s:%4s:%12s",car_type,car_data,car_time);//拆分
		}
		else
		{
			char temp[20];
			sprintf(temp,"Error");//接收程序出错,串口发送Error
			HAL_UART_Transmit(&huart1,(uint8_t *)temp,strlen(temp),50);//串口发送frq1
            while(huart1.gState != HAL_UART_STATE_READY);//确保上次中断接收完,再进行下一次中断
		}
		rx_pointer=0;//把指针归位,准备接收下一次数据
		memset(rxdata,0,30);//把变量清零,准备接收下一次数据
	}
}

从串口接收的字符串rxdata假如是“CNBR:A392:200202120000”,那么就把前4个字符转化成字符串赋值给car_type,把中间4个字符转化成字符串赋值给car_data,后面12个字符转化成字符串赋值给car_time。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值