1. 举例
$OBDRT=14.0,1500,20,17.00,50.00,80,8.00,8.00,65.00,0\r\n
"$OBDRT=14.0,1500,20,17.00,50.00,80,8.00,8.00,65.00,0\r\n"
2. 分析
为了提取这串字符命令里面的10个数据,需要以下几个步骤:
2.1 步骤一:去掉首位("$OBDRT=")
rxbuf.remove(0, 7);
"14.0,1500,20,17.00,50.00,80,8.00,8.00,65.00,0\r\n"
2.2 步骤二:去掉末尾的换行符(“\r\n”)
rxbuf = rxbuf.simplified();
返回一个字符串,该字符串从开头和结尾删除了空格,并将每个内部空格序列替换为单个空格。并将内部包括ASCII字符’\t’,’\n’,’\v’,’\f’,’\r’和’ '.替换为‘ ’,如果替换后有两个空格的话,只保留一个空格。
"14.0,1500,20,17.00,50.00,80,8.00,8.00,65.00,0"
2.3 步骤三:split();方法用于把一个字符串分割成字符串数组
QStringList list = rxbuf.split(",");
double BV = list[0].toDouble();
double RPM = list[1].toDouble();
double SP = list[2].toDouble();
double TO = list[3].toDouble();
double EL = list[4].toDouble();
double CT = list[5].toDouble();
double IFC = list[6].toDouble();
double AFC = list[7].toDouble();
double ROV = list[8].toDouble();
double EN = list[9].toDouble();
把str这个字符串用逗号“,”进行分割,分割后的字符串数组放在list[]中,比如 111,222,333那么list[0]=111 list[1]=222 list[2]=333
2.4 将参数打印
2.4.1 类似mfc中CString的format函数
int year=18;
qDebug("今年我%d",year);
注:
%c 读入一个字符
%d 读入十进制整数
%i 读入十进制,八进制,十六进制整数
%o 读入八进制整数
%x,%X 读入十六进制整数
%s 读入一个字符串,遇空格、制表符或换行符结束。%f表示其输出格式为浮点数。%lf同%f,表示浮点数。但是它是用在输入函数scanf中的,而%f则是用在输出函数printf中的。
%c表示输出格式为字符。%s表示其输出格式为字符串。
%f,%F,%e,%E,%g,%G 用来输入实数,可以用小数形式或指数形式输入。
%p 读入一个指针
2.4.2 类似c++的cout函数
QString str="world";
qDebug()<<"hello "<<str<<"!"<<endl;
注:此处endl起到的作用有两个:
a、等同于\n换行
b、刷新缓冲区,将缓冲区数据写入文件或屏幕,因此会影响程序效率。
qDebug("BV =%f RPM =%f SP =%f TO =%f EL =%f CT =%f IFC =%f AFC =%f ROV =%f EN =%f ",BV,RPM,SP,TO,EL,CT,IFC,AFC,ROV,EN);
BV =14.000000 RPM =1500.000000 SP =20.000000 TO =17.000000 EL =50.000000 CT =80.000000 IFC =8.000000 AFC =8.000000 ROV =65.000000 EN =0.000000