程序代码如下:
DWORD CSerialPort::ReadComm(char *buf)
{

DWORD length=0;
COMSTAT ComStat;
DWORD dwErrorFlags;
DWORD dwWaitForSingle;
ClearCommError(m_hComPort,&dwErrorFlags,&ComStat);
if(!ComStat.cbInQue)
return 0;
length=ComStat.cbInQue;
if (!ReadFile(m_hComPort,buf,length,&length,&m_osFRead))
{
if(GetLastError()== ERROR_IO_PENDING)
{
dwWaitForSingle=WaitForSingleObject( m_hComPort,2000);
switch(dwWaitForSingle)
{
case WAIT_OBJECT_0:
length =ComStat.cbInQue;
break;
case WAIT_TIMEOUT:
length = 0;
break;
case WAIT_FAILED:
length =0;
break;
}
}
}
return length;
}    但是接收到的数据是一些乱码一样的字符,比如发送一个数字5,接收到的是“|”,发送一个数字6,接收到的时“-”,还有其它字符我打不出来;我也用串口大师测试过,如果不勾串口大师上面的16进制,接收到的信息和我上面的程序时一样的,但是如果勾了的话,接收显示的信息就是正常的。想请问大家这个时什么原因啊,应该如何解决??
   谢谢了!

解决方案 »

  1.   

    我也用串口大师测试过,如果不勾串口大师上面的16进制,接收到的信息和我上面的程序时一样的,但是如果勾了的话,接收显示的信息就是正常的。//显示的问题,数据是对的。CString str;
    str.Format("%02x", 你收到的字符);
      

  2.   

    我用了你说的:
     CString str; 
    str.Format("%02x", 你收到的字符); 
    编译错误的
    我改成
    CString str; 
    str.Format(_T("%02x", 你收到的字符)); 
    编译没有错误了,但是有个警号说:“_T”宏的实参太多
    而且字符还是没有转换过来和原来显示的一样的
      

  3.   

    CString str;
    str.Format(_T("%02x"), 15);
    MessageBox(str);//没有警告,功能也正常啊
      

  4.   

    //调用刚才那个读的函数
    DWORD length = m_Fserial.ReadComm(buf);   
    for (i=0;i<length;++i)
    {
    str.Format(_T("%02x", buf[i]));
    }我是这样写的,你看对不对?
      

  5.   

    应该没问题。
    要把整串显示出来的话
    CString tmp
    str = _T("");
    for (i=0;i <length;++i) 

    tmp.Format(_T("%02x ", buf[i])); 
    str += tmp;
      

  6.   

    照你说的做,警告还是存在的;
      还有,比如我发送一个数字6,然后str里面显示的"e39338".......
    这应该不对的啊!
      

  7.   

    而且好像每次str里面显示的都不一样