源代碼是這樣啊
static long rxdatacount=0; //該變數用于接收字符計數然后我通過OnCommunication,從串口接收到一段16進制資料(資料都存在m_ReceiveData中)
LONG CSCOMMDlg::OnCommunication(WPARAM ch, LPARAM port)
{
if (port <= 0 || port > 16)
return -1;
rxdatacount++; //接收的位元組計數
CString strTemp;
strTemp.Format("%ld",rxdatacount);
strTemp="RX:"+strTemp;
//byte RecevieData[1000];
// unsigned short int i;
if(m_bStopDispRXData) //如果選擇了“停止顯示”接收資料,則回傳
return -1; //注意,這種情況下,計數仍在繼續,只是不顯示
//若設定了“自動清空”,則達到50行后,自動清空接收編輯框中顯示的資料
if((m_ctrlAutoClear.GetCheck())&&(m_ctrlReceiveData.GetLineCount()>=50))
{
m_ReceiveData.Empty();
UpdateData(FALSE);
}
//如果沒有“自動清空”,資料行達到400后,也自動清空
//因為資料過多,影響接收速度,顯示是最費CPU時間的操作
if(m_ctrlReceiveData.GetLineCount()>400)
{
m_ReceiveData.Empty();
m_ReceiveData="https://bbs.csdn.net/topics/***The Length of the Text is too long, Emptied Automaticly!!!***/r/n";
UpdateData(FALSE);
}
//如果選擇了"十六進制顯示",則顯示十六進制值
CString str;
if(m_ctrlHexReceieve.GetCheck())
str.Format("%02X ",ch);
else
str.Format("%c",ch);
//以下是將接收的字符加在字串的最后,這里費時很多
//但考慮到資料需要保存成檔案,所以沒有用List Control
int nLen=m_ctrlReceiveData.GetWindowTextLength();
m_ctrlReceiveData.SetSel(nLen, nLen);
m_ctrlReceiveData.ReplaceSel(str);
nLen+=str.GetLength();
m_ReceiveData+=str;
return0;
01 03 0C 1A E0 09 C4 03 E8 01 90 00 32 00 00 E7 A6
然后我要取出其中的四位 1AE0轉換成十進制代表ph, 09C4轉換成十進制代表溫度 的數值。 我要怎么來實作啊
uj5u.com熱心網友回復:
可以用位元組型的陣列來存接收到的資料;如 byte RecvData[512];然后取出對應的資料
uj5u.com熱心網友回復:
可以直接MID,然后strol,可以直接轉換,如果考慮十進制正負的話,還需要判斷下高位!uj5u.com熱心網友回復:
樓主你的問題解決了嗎?同問!uj5u.com熱心網友回復:
樓主,接收不了漢字啊!比如在在另一埠發送“你好”接收端是這樣的:ch=196
str=?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/147945.html
標籤:基礎類
下一篇:子視窗全屏問題
