怎样检测串口接收到的结构体是不是发送的结构体?新人求助。
void CProject2Dlg::OnSend()
{
// TODO: Add your control notification handler code here
UpdateData(true);
//结构体指针
struct Person *prPtr;
prPtr=&pr1;
WriteComm(prPtr,sizeof(Person));
char ch[1024];
memset(ch,0,1024);
ReadComm(ch, 1024);//用字符串读取串口数据
struct Person temp1;//接收结构体
memcpy(&temp1,ch,sizeof(struct Person));//将读取的字符串转化为结构体
m_receive.Format("%s,%s,%f",temp1.id,temp1.name,temp1.salary);
if (temp1==pr1)
{
((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);
}
else
{
((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);
}
报错:
error C2678: binary '==' : no operator defined which takes a left-hand operand of type 'struct Person' (or there is no acceptable conversion)
[解决办法]
memcmp()
[解决办法]
加入CRC32校验
[解决办法]
if(0 == memcmp(temp1,pr1,sizeof(Person ))){ // 相同}// 或者一项一项的比较if(temp1.id == pr1.id && 0 == strcmp(temp1.name, pr1.name)) //.....
[解决办法]
十有八九十字节对齐的问题,先补补字节对齐的知识吧