串口解析注意
2025/9/8小于 1 分钟
注意:
❌ 问题出在哪?
%s 是解析字符串时遇到空白字符(空格、回车、换行)才结束,
而你用了 : 作为分隔符,但 %s 不会自动把冒号当成结束符!
所以这句:
sscanf("VNBR:D583:200202213205", "%s:%s:%2d...", ...)第一个 %s 会把整串 "VNBR:D583:200202213205" 吞下去!
char RX_buf[] = "VNBR:D583:200202213205";
struct {
char kind[5];
char signal[5];
int Year, Month, Day, Hour, Min, Sec;
} in_parking;
sscanf(RX_buf, "%4s:%4s:%2d%2d%2d%2d%2d%2d",
in_parking.kind, in_parking.signal,
&in_parking.Year, &in_parking.Month, &in_parking.Day,
&in_parking.Hour, &in_parking.Min, &in_parking.Sec);
printf("%s:%s:%02d%02d%02d%02d%02d%02d\r\n",
in_parking.kind, in_parking.signal,
in_parking.Year, in_parking.Month, in_parking.Day,
in_parking.Hour, in_parking.Min, in_parking.Sec);
