程序代码如下:
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进制,接收到的信息和我上面的程序时一样的,但是如果勾了的话,接收显示的信息就是正常的。想请问大家这个时什么原因啊,应该如何解决??
谢谢了!
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进制,接收到的信息和我上面的程序时一样的,但是如果勾了的话,接收显示的信息就是正常的。想请问大家这个时什么原因啊,应该如何解决??
谢谢了!
str.Format("%02x", 你收到的字符);
CString str;
str.Format("%02x", 你收到的字符);
编译错误的
我改成
CString str;
str.Format(_T("%02x", 你收到的字符));
编译没有错误了,但是有个警号说:“_T”宏的实参太多
而且字符还是没有转换过来和原来显示的一样的
str.Format(_T("%02x"), 15);
MessageBox(str);//没有警告,功能也正常啊
DWORD length = m_Fserial.ReadComm(buf);
for (i=0;i<length;++i)
{
str.Format(_T("%02x", buf[i]));
}我是这样写的,你看对不对?
要把整串显示出来的话
CString tmp
str = _T("");
for (i=0;i <length;++i)
{
tmp.Format(_T("%02x ", buf[i]));
str += tmp;
}
还有,比如我发送一个数字6,然后str里面显示的"e39338".......
这应该不对的啊!