91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MFC串口通信發送16進制數據的方法

發布時間:2020-08-23 17:52:20 來源:腳本之家 閱讀:817 作者:Timmy_Y 欄目:編程語言

本文實例為大家分享了MFC串口通信發送16進制數據的具體代碼,供大家參考,具體內容如下

MFC串口通信會使用m_mscomm控件。

發送數據一般是在edit control 里輸入自己想發送的內容,然后點擊send button。

如果直接發送字符串內容,通過下面代碼(send button內寫入)即可:

UpdateData(true); //讀取編輯框內容 
m_mscomm.put_Output(COleVariant(m_EditSend)); 
m_EditSend.Empty(); //發送后清空輸入框 
UpdateData(false); //更新編輯框內容 

但是這樣發送的是字符串內容,而串口通信常常需要發送16進制數據,接收端直接按HEX格式接收就可以了,不用再進行字符串轉HEX。因此最好在發送端就將字符串轉成16進制數據發送,下面代碼即可實現該功能:

(1)send button

CByteArray HexDataBuf;
 int i = 0;
 BYTE SendBuf[128]={0};
 BYTE GetData[256]={0};
 int SendLen = 0;
 int GetLen = 0;
 
 UpdateData(TRUE);//獲取編輯框內容
 if(m_EditSend.IsEmpty())
 {
  AfxMessageBox(_T("發送數據為空!"));
  return;
 }
 HexDataBuf.RemoveAll();    //清空數組 
 
 GetLen = m_EditSend.GetLength();
 for(i=0; i<GetLen; i++)
 {
  GetData[i] = (BYTE)m_EditSend.GetBuffer()[i];
 }
 StringtoHex(GetData, GetLen, SendBuf, &SendLen);//將字符串轉化為字節數據
 
 HexDataBuf.SetSize(SendLen);   //設置數組大小為幀長度 
 for(i=0; i<SendLen; i++)
 {
  HexDataBuf.SetAt(i,SendBuf[i]);
 }
 m_mscomm.put_Output(COleVariant(HexDataBuf)); //發送十六進制數據
 
 UpdateData(false); //更新編輯框內容

(2)stringtoHex函數

void StringtoHex(BYTE *GB, int glen, BYTE* SB, int* slen)
{
 int i; //遍歷輸入的字符串
 int a = 0; 
 char temp; //接收字符,用來判斷是否為空格,若是則跳過
 char temp1,temp2; //接收一個字節的兩個字符 例如EB,則temp1='E',temp2 = 'B'
 *slen = 0; //輸出的16進制字符串長度
 for(i=0;i<glen;i++)
 {
 temp = GB[i];
 if(temp==' ')
 continue;
 
 if(a == 0)
  temp1 = GB[i];
 if(a == 1)
  temp2 = GB[i];
 a++;
 
 if(a==2)
 {
  a = 0;
  temp1 = temp1 - '0';
  if (temp1>10)
  temp1 = temp1 -7;
  temp2 = temp2 - '0';
  if (temp2>10)
  temp2 = temp2 -7;
 
 SB[*slen] = temp1*16+temp2;
  (*slen)++;
 }
 }
 
 }

通過以上代碼即可發送16進制數據,如下圖是用串口調試工具的仿真結果,發送數據字節之間是否存在空格對結果沒有影響。

MFC串口通信發送16進制數據的方法

另外,在數據發送中用到了CByteArray類,這是一種支持字節的動態數組,詳情可在MSDN上查詢。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广水市| 台东县| 鄂尔多斯市| 涞源县| 嘉义县| 新源县| 郑州市| 正蓝旗| 察隅县| 象山县| 通渭县| 普格县| 广饶县| 四会市| 新和县| 溧阳市| 镇康县| 永宁县| 和顺县| 平舆县| 天峨县| 剑阁县| 改则县| 楚雄市| 万山特区| 嘉黎县| 察雅县| 安西县| 西充县| 岳池县| 微山县| 梅河口市| 海伦市| 巧家县| 安丘市| 福州市| 收藏| 茶陵县| 徐水县| 遂平县| 托克逊县|