无法显示接收字节

时间:2013-12-04 08:51:47

标签: c++ winapi serial-port

我必须在win32中进行串行通信。 我可以读取没有字节但不能显示读取数据。

我使用了以下函数来读取数据

DWORD serial::ReadTest()
{
char inBuffer[BUF_SIZE];
DWORD nBytesToRead      = BUF_SIZE;
DWORD dwBytesRead       = 0;

ReadFile(serialHandle,
            inBuffer,
            nBytesToRead,
            &dwBytesRead,
            NULL); 

MessageBox(NULL,"ReadFile completed", _T("Read"), NULL);

return dwBytesRead;
}

我做了以下显示读取字节数的事情

{
DWORD dwReturnValue;
dwReturnValue = serialObj.ReadTest();
printf( "\nRead complete. Bytes read: %d\n", dwReturnValue);
char temp[255];
sprintf(temp,_T("%X"),dwReturnValue);
//to display in the static text
HWND hWnd = GetDlgItem(hDlg, IDC_STATIC_READ); //
if ( hWnd )
{
SetWindowText(hWnd, temp);
    }
}

我必须显示实际的读数据。我搜索并尝试了不同的选项,如char *但它不起作用。有人可以建议我显示实际数据的适当方式。我正在使用十六进制模式在另一侧发送,我应该在此程序中接收十六进制数据。

2 个答案:

答案 0 :(得分:0)

首先,您需要更改ReadTest函数,将缓冲区和缓冲区长度作为参数:

WORD serial::ReadTest(char* inBuffer, const DWORD nBytesToRead)
{
    DWORD dwBytesRead       = 0;

    ...
}

然后在代码调用 ReadTest函数中声明缓冲区:

char inBuffer[BUF_SIZE];

DWORD nBytesRead = serialObj.ReadTest(inBuffer, sizeof(inBuffer));

现在inBuffer数组包含nBytesRead个字节。

答案 1 :(得分:0)

例如

inBuffer[BUF_SIZE] = {0x24, 0x21, 0x23, 0x24} 

我正在尝试从另一方发送十六进制值。

然后我可以使用以下方法逐个打印这些值:

for (int i=0; i<nBytesRead; i++)
{
char temp[255];
sprintf(temp,_T("%X"),inBuffer[i]);
//to display in the static text
HWND hWnd = GetDlgItem(hDlg, IDC_STATIC_READ); //
if ( hWnd )
{
    SetWindowText(hWnd, temp);
}
}

这里我打印了每件商品。如何将其打印为单个块。