最近用CSerialPort编写串口程序的时候,发现只能接收字符和数字,不能接收汉字,
自己在设计的时候能够实现汉字的显示,但是接收区在接收到几行汉字后就会一直的闪动,不知道是什么原因!
我的接收代码如下:
LONG CSCOMMDlg::OnCommunication(WPARAM ch, LPARAM port)
{
         ...
m_ReceiveData+=ch;
UpdateData(FALSE);
return 0;
}

解决方案 »

  1.   

    汉字是占用两个字节的,如果你在接收的时候没有进行判断接收的字符是不是一个汉字的终结的话,就会出现这样的问题,所以UpdateData(FALSE); 之前应该对字符串进行一些判断,否则就会显示一些乱码或不显示
    m_ReceiveData+=ch; 
    BYTE bchar;
    bchar = (BYTE)m_ReceiveData[m_ReceiveData.GetLength()-1];
    if(bchar > 127)
      m_ReceiveData = m_RecieveData.Left(m_ReceiveData.GetLength()-1);
    UpdateData(FALSE); //不过这样会丢失一些汉字,lz可以想一些办法,将汉字的一半暂存起来,与下一次来的数据衔接起来就可以了
      

  2.   

    对于汉字,你要接收两个字符,一个汉字占用2个字节空间..可以根据ascii码值 >=128 来判断当前这个字符是普通字符还是汉字
      

  3.   

    汉字与字符的存储结构不一样,一个汉字占用两个字节。CSerialPort接收触发是通过消息模式(如果不作改动,在非窗口类中不能接收到数据,默认的消息是发往CWND的),每来一个BYTE的数据,CSerialPort类会向你的窗口类发送一个消息,从而触发你的接收函数。 普通字符的时候,一个字母就占用一个BYTE。换成汉字就不同,一个汉字占2个BYTE,所以要先预存一个,再加些判断。