//把传入第一个参数转化为字符指针,表示收到的字符串 char*data=(char*)wParam; char s1 ; s1=data[0]; //把传入第二个参数转化为DWORD格式,表示收到字符串的长度 DWORD iLen=(DWORD)len; //定义临时字符变量数组 char m_pSerialData[MAX_PATH]; //定义临时字符串变量 CString tmpstr; //复位 memset(m_pSerialData,0,MAX_PATH); for(int i=0;i<(int)iLen;i++) { m_pSerialData[i]=data[i]; } //赋值给字符串 tmpstr=m_pSerialData; //保存接受到的数据 ::Log(GetDirectory()+"\\Log\\Com.csv",","+tmpstr,TRUE,"Time,Receive,send"); //如果收到"A0",而且开启了自动检测,则运行检测 if (tmpstr.Left(2)=="A0" && TRUE==m_bAutoRun) 优化这段代码
时间: 2023-07-15 09:14:12 浏览: 143
格式化字符串函数-vc++2010全
可以考虑对代码进行如下优化:
1. 将临时字符变量数组 `m_pSerialData` 的大小从 `MAX_PATH` 改为 `iLen+1`,避免浪费内存。
2. 不需要使用临时的 CString 变量 `tmpstr`,可以直接使用 `std::string` 类型来保存接收到的数据。
3. 在循环中可以使用字符串拼接的方式来逐个添加字符,而不是使用数组下标的方式,这样可以使代码更加简洁。
4. 在判断字符串是否以 "A0" 开头时,可以直接使用 `strncmp` 函数来比较,而不是使用 `Left` 函数。
5. 可以将字符串常量 "A0" 提取为一个宏定义或者常量变量。
参考优化后的代码如下:
```
//把传入第一个参数转化为字符指针,表示收到的字符串
char* data = (char*)wParam;
//把传入第二个参数转化为DWORD格式,表示收到字符串的长度
DWORD iLen = (DWORD)len;
//定义临时字符变量数组
char m_pSerialData[iLen+1];
//复位
memset(m_pSerialData, 0, sizeof(m_pSerialData));
//将收到的数据添加到临时字符变量数组中
for (int i = 0; i < (int)iLen; i++) {
m_pSerialData[i] = data[i];
}
m_pSerialData[iLen] = '\0'; //添加字符串结尾符号
//保存接受到的数据
std::string receiveData = "," + std::string(m_pSerialData);
::Log(GetDirectory() + "\\Log\\Com.csv", receiveData, TRUE, "Time,Receive,send");
//如果收到"A0",而且开启了自动检测,则运行检测
const char* checkStr = "A0";
if (strncmp(m_pSerialData, checkStr, strlen(checkStr)) == 0 && m_bAutoRun) {
// 运行检测代码
}
```
阅读全文