我现在做毕设 简单的gps数据接收用的是串口rs232。接收到的数据是乱码
请高手执指教!谢谢
我写的代码如下
redbuff()//读取串口数据的函数
{
CHAR *readBuff=NULL;//接收缓冲区
ReadFile(ceSeries->m_hComm,readBuff,2,actualReadLen,0);
if(actualReadLen>0)//我的意思是unicode每个字符占两个字节吗,所以每次接收两个字符
{
::SendMessage(ceSeries->m_hWnd,WM_COMM_RXCHAR,(WPARAM)readBuff,(LPARAM) ceSeries->portNo);
}//接受到字符后向窗口发送消息
}
LONG CGpsDlg::OnCommunication(WPARAM ch,LPARAM port)//处理接受到的数据的函数 这里的参数ch就是上边传过来的readbuff
{
m_strReceived+=(cstring*)ch;//这里的m_strReceived以定义为类的成员变量,是cstring类型的
m_strReceived+=_T("\r\n");
SetDlgItemText(IDC_EDIT2,m_strReceived);//在文本框里显示字符
return 0;
}
请高手指教
怎么处理上边的两端两段代码使显示出正确的数据
谢谢!
请给出修改后的完整代码
gps发送的数据应该是ASCII码的吧,你用“wcstombs”函数把收到的ASCII字符串转换成UINCODE字符串然后再发给窗口。
既然是串口,那么就该找串口之类的例子, 我想网上这样的例子不少吧.
1. 串口是一个字节一个字节接收的 跟UINCODE没有什么区别
2. 所用的串口操作函数应该是在一个线程里操作才是合适的.
3. 任何通信都讲究的误码率,你这通信 即没有校验码 也没有结束标记,感觉就会出现乱码.
4. 你这样两个两个字节收,出来乱码也是很正常的, 例如 一个汉字 你收到前半个字节, 那么显示出来的结果肯定是乱码
我现在做毕设 简单的gps数据接收用的是串口rs232。接收到的数据是乱码
请高手执指教!谢谢
我写的代码如下
开始提问的时候我写错了,我处乱码的实际程序是这样的
redbuff()//读取串口数据的函数
{
TCHAR *readBuff=NULL;;//接收缓冲区
ReadFile(ceSeries-> m_hComm,readBuff,2,actualReadLen,0);
if(actualReadLen> 0)//我的意思是unicode每个字符占两个字节吗,所以每次接收两个字符
{
::SendMessage(ceSeries-> m_hWnd,WM_COMM_RXCHAR,(WPARAM)readBuff,(LPARAM) ceSeries-> portNo);
}//接受到字符后向窗口发送消息
}
LONG CGpsDlg::OnCommunication(WPARAM ch,LPARAM port)//处理接受到的数据的函数 这里的参数ch就是上边传过来的readbuff
{
m_strReceived+=(cstring*)ch;//这里的m_strReceived以定义为类的成员变量,是cstring类型的
m_strReceived+=_T("\r\n");
SetDlgItemText(IDC_EDIT2,m_strReceived);//在文本框里显示字符
return 0;
}
请高手指教
怎么处理上边的两端两段代码使显示出正确的数据
谢谢!
请给出修改后的完整代码
GPS数据不是UNICODE
就是ASCII码
Buffer要用BYTE[]
gps数据不是unicode。
乱码,一般是波特率不对……
2楼所言即是
你可以先试一个一个的传送ASCII码,接收、处理、显示
首先你要弄清楚是接收到的数据就是乱码还是显示的是乱码?
奇怪的是你为什么在redbuff里要2个2个的接收,一次把缓冲区的数据都读出来就可以拉。
WPARAM 能直接转成cstring吗?
cstring tmp = cstring((char*)ch);
先把串口调试通,再调试GPS。否则出现错误,都不知道是哪个出错的。
一般串口乱码,就是两端设置不匹配,还有就是Unicode与ASCII的问题。