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。