我必须在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 *但它不起作用。有人可以建议我显示实际数据的适当方式。我正在使用十六进制模式在另一侧发送,我应该在此程序中接收十六进制数据。
答案 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);
}
}
这里我打印了每件商品。如何将其打印为单个块。