hur.cn - 华软网

 热门搜索

VC CSerialPort类串口通信

  作者:未知    来源:网络    更新时间:2011/8/17
我用CSerialPort类做了一个串口通信的软件,但是在和串口调试软件通信时,我用十六进制的形式发送,串口调试软件接收上前面的数据是对的,但是后面会跟着一堆乱码。不知道怎么回事?我是个新手,请各位大侠帮帮忙!
if(m_ctrlHexSend.GetCheck())
{
char data[512];
memset(data,0,512);
// int len=Str2Hex(m_strSendData,data);
data[0]=0x53;
data[1]=0x4D;
data[2]=0x50;
data[3]=0x32;
data[4]=0x35;
data[5]=0x38;
data[6]=0x52;
data[7]=0x23;
m_Port.WriteToPort(data,8);
TX_count+=(long)((m_strSendData.GetLength()+1)/3);
}
---华软 网友回答---
你发送了 8 个应该显示八个才对啊。后面怎么有乱码呢,调试软件用十六进制显示方式和字符显示方式分别看看,那些乱码是什么。
---华软网友回复---
char data[512];
数组初始化一下吧  char data[512] = {0};

引起乱码可能是要读取“\0”,但是你最后一位可能不是
---华软网友回复---
不是接收问题,是显示问题。你在接受后加入\0结束标识了吗

---华软网友回复---
引用 3 楼 buyong 的回复:
不是接收问题,是显示问题。你在接受后加入\0结束标识了吗


嗯,是少加了\0,现在我也可以接收了,但是想把在接收框的数据存到自定义的数组中,好像一直存不进去哦。
      char data1[512]; 
      nLen+=str.GetLength();
m_ReceiveData+=str;
memcpy(data1,str,strlen(str));
---华软网友回复---
C++">// CString str ?
memcpy(data1, str.GetBuffer(0), strlen(str));


---华软网友回复---

memcpy(data1, str.GetBuffer(0), str.GetLength());
---华软网友回复---
引用 6 楼 lfchen 的回复:
memcpy(data1, str.GetBuffer(0), str.GetLength());


这样可以把数存进去,但是我调试看到,数据好像只会存到data1[0],data1[1].
---华软网友回复---
这个就是纯粹的数据操作问题了,楼主只有自己慢慢解决了      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。