求助:请各位大哥帮我看看这个字符串处理的问题,谢谢!
//读取串口 dwBufferLength个字符到 Buffer 返回实际读到的字符数 可读任意数据
DWORD Read(LPVOID Buffer, DWORD dwBufferLength, DWORD dwWaitTime = 10)
{
if(!IsOpen())
return 0;
COMSTAT Stat;
DWORD dwError;
if(::ClearCommError(_hCommHandle, &dwError, &Stat) && dwError > 0)
{
::PurgeComm(_hCommHandle, PURGE_RXABORT | PURGE_RXCLEAR);
return 0;
}
if(!Stat.cbInQue) // 缓冲区无数据
return 0;
unsigned long uReadLength = 0;
dwBufferLength = dwBufferLength > Stat.cbInQue ? Stat.cbInQue : dwBufferLength;
if(!::ReadFile(_hCommHandle, Buffer, dwBufferLength, &uReadLength, &_ReadOverlapped))
{
if(::GetLastError() == ERROR_IO_PENDING)
{
WaitForSingleObject(_ReadOverlapped.hEvent, dwWaitTime); // 结束异步I/O
if(!::GetOverlappedResult(_hCommHandle, &_ReadOverlapped, &uReadLength, false))
{
if(::GetLastError() != ERROR_IO_INCOMPLETE)
uReadLength = 0;
}
}
else
uReadLength = 0;
}
return uReadLength;
}
//读取串口 dwBufferLength - 1 个字符到 szBuffer 返回ANSI C 模式字符串指针 适合一般字符通讯
char * ReadString(char *szBuffer, DWORD dwBufferLength, DWORD dwWaitTime = 20)
{
unsigned long uReadLength = Read(szBuffer, dwBufferLength - 1, dwWaitTime);
szBuffer[uReadLength] = '\0 ';
return szBuffer;
}
//写串口 可写任意数据 "abcd " or "\x0\x1\x2 "
DWORD Write(LPVOID Buffer, DWORD dwBufferLength)
{
if(!IsOpen())
return 0;
DWORD dwError;
if(::ClearCommError(_hCommHandle, &dwError, NULL) && dwError > 0)
::PurgeComm(_hCommHandle, PURGE_TXABORT | PURGE_TXCLEAR);
unsigned long uWriteLength = 0;
if(!::WriteFile(_hCommHandle, Buffer, dwBufferLength, &uWriteLength, &_WriteOverlapped))
if(::GetLastError() != ERROR_IO_PENDING)
uWriteLength = 0;
return uWriteLength;
}
/*************处理串口接受到的信息*****************************
LRESULT On_Receive(HDC hdcs)
{
int len1; //缓冲区字符长度
char str[2];
//char *str1;
len1 = com2.GetInputSize();
if(len1 > 1)
{
str1=com2.Read(str,2);
MessageBox(NULL, TEXT(str), TEXT( "COM2 "), MB_OK);
}
return 0;
}
//*************处理串口接受到的信息*****************************
当我用串口软件向 串口发送 字符串 "11 "
可是 弹出的是 "11烫 " 呢?
这是什么原因啊?
是不是需要用函数 ReadString 啊?
如果用 ReadString ,那么处理串口接收的这段程序应该怎么写?
谢谢!
[解决办法]
字符串最后面加 '\0 '
[解决办法]
/*************处理串口接受到的信息*****************************
LRESULT On_Receive(HDC hdcs)
{
int len1; //缓冲区字符长度
char str[3]; // <======
// char *str1;
len1 = com2.GetInputSize();
if(len1 > 1)
{
str1=com2.Read(str,2);
str1[2] = '\0 '; // <=============
MessageBox(NULL, TEXT(str), TEXT( "COM2 "), MB_OK);
}
return 0;
}
//*************处理串口接受到的信息*****************************
字符串以 '\0 '作为结尾符。