字符串显示问题(方便初学者串口调试代码)

xiaoxiao2021-02-28  130

void GenericApp_Send_wendu_Message(void) { byte str[10];

//char strTemp[10]; byte temp;

temp = ReadDs18B20(); //读取温度数据

str[0] = ‘1’; //这里是,节点模块编号,想必这里也就是徐老师跟我讲的数据包的格式了吧。这里就是Ascii码值了吧

str[1] = temp/10+48;//把温度数据转换成字符 str[2] = temp+48; str[3] = ’ ‘;

先贴上以上代码,如上为什么需要加上48呢???(这应该属于C语言基础里面的东西,那么重新温习一遍吧!) int型和char型通用的,但是int型转char型需要加上48。原因是因为‘0’的ASCII值为48,那么对他进行偏移之后自然就是相对应的字符类型的数据。 所以数组里面存放的是ASCII码值,即是51或者是’3’,而Haluartwrite函数只对字符串输出有效,所以自然要加上48了,这就是原因。

case: 该终端发过来的簇浩互相匹配的话: if(1==pkt->cmd.Data[0]-48) //HalUARTWrite(0,&pkt->cmd.Data[0],1); //HalUARTWrite(0, “hello node 2\n”,sizeof(“hello node 1”)+1); HalUARTWrite(0, &pkt->cmd.Data[1], pkt->cmd.DataLength-1); //输出接收到的数据 // HalUARTWrite(0, &pkt->cmd.Data[1], 1); //HalUARTWrite(0, “\n”, 1); // 回车换行 //HalUARTWrite(0, &pkt->cmd.Data[2], 2); HalUARTWrite(0, “hello”, 5); uint8 wendu=(pkt->cmd.Data[1]-48)*10+pkt->cmd.Data[2]-48; // HalUARTWrite(0, &wendu, 2); if(wendu>fazhi) P1_3=1; else P1_3=0;

} }

也是同样的道理啊,之前加了48,现在如果要还原回去int的话,那么需要相应的减去48.但是还原完了之后,如果想要打印出48的话,那么还是得加上48,存放到一个字符串数组中,便于打印函数打印。节点匹配 if(1==pkt->cmd.Data[0]-48)也需要减去48,也是同样道理。

PS:之前对以上的概念不太清晰,导致老是调试出错。这样就实现了一个小小的智能控制(加上相应的驱动电路的话)。

转载请注明原文地址: https://www.6miu.com/read-34346.html

最新回复(0)