用MFC寫了一個串口接收的函式,為了測驗,單片機stm32每隔一秒不停地發送同一個數,比如是0x32,想顯示在接收框里面,但是每次顯示都是亂碼,如果以16進制顯示就是8位16進制碼。
設定斷點除錯了一下,發現bt是成功接收到了的,但是以cstring顯示就亂碼了,為什么呢?

代碼如下:
void C無人機地面控制終端Dlg::OnCommMscomm1()
{
// TODO: 在此處添加訊息處理程式代碼
VARIANT VARIANT_Input;
COleSafeArray SafeArray_Input;
LONG len, k;
BYTE RXData[1024];
CString strtemp ;
if (m_mscom.get_CommEvent() == 2)
{
VARIANT_Input = m_mscom.get_Input(); //讀緩沖區
SafeArray_Input = VARIANT_Input; //VARIANT型變數轉換為COleSafeArray型變數
len = SafeArray_Input.GetOneDimSize();
for (k = 0; k< len; k++)
SafeArray_Input.GetElement(&k, RXData + k); //轉換為BYTE型陣列
for (k = 0; k < len; k++)
{
char bt = *(char*)(RXData + k);
strtemp.Format(_T("%c", bt));
m_EditReceive += strtemp; // 接收到編輯框里面
}
m_EditReceive += "\r\n";
UpdateData(false);
m_Edit.SetSel(-1, -1);
this->SetDlgItemTextW(IDC_EDIT1, m_EditReceive);//將m_EditReceive內容顯示到ID為IDC_EDIT1的編輯框的最后位置
m_Edit.LineScroll(m_Edit.GetLineCount() - 1, 0);//將垂直滾動條滾動到最后一
}
查了好久了也不知道為什么,求問,不甚感激!
uj5u.com熱心網友回復:
UNicode '2' = 0x0032; 2個位元組看看
strtemp.Format(_T("%c", bt));
結果
uj5u.com熱心網友回復:
char bt[2] = {0};bt[0]=*(char*)(RXData + k);
uj5u.com熱心網友回復:
設定一個斷點 直接查看原始資料, 如果不一致, 可能是埠引數不一致, 如波特率 資料位長度等uj5u.com熱心網友回復:
或者WCHAR wch=(WCHAR)bt;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/150771.html
上一篇:win32鍵盤事件中的延遲情況
