寫了一個串口接收的上位機,字符接收正常,請問怎么實作接收16進制資料并顯示在編輯框中,在緩沖區種的資料是“\x1f\xff”這種,要在編輯框顯示1f ff,看了其他人的代碼像這樣
variant_inp = m_MSComm.get_Input(); //讀緩沖區但是會出現程式崩潰的情況,求大神解決將將緩沖區的16進制資料讀出來顯示在編輯框。
safearray_inp = variant_inp; //VARIANT型變數轉換為ColeSafeArray型變數
len = safearray_inp.GetOneDimSize(); //得到有效資料長度
for (k = 0; k<len; k++)
safearray_inp.GetElement(&k, rxdata + k);//轉換為BYTE型陣列
for (k = 0; k<len; k++) //將陣列轉換為Cstring型變數
{
BYTE bt = *(char*)(rxdata + k); //字符型
if (m_ctrlHexDiaplay.GetCheck())
strtemp.Format("%02X ", bt); //將字符以十六進制方式送入臨時變數strtemp存放,注意這里加入一個空隔
else
strtemp.Format("%c", bt); //將字符送入臨時變數strtemp存放
m_EditReceive += strtemp; //加入接收編輯框對應字串
}
uj5u.com熱心網友回復:
可能有越界情況
variant_inp = m_MSComm.get_Input(); //讀緩沖區
safearray_inp = variant_inp; //VARIANT型變數轉換為ColeSafeArray型變數
len = safearray_inp.GetOneDimSize(); //得到有效資料長度
BOOL bHexFlag = m_ctrlHexDiaplay.GetCheck();
for (k = 0; k<len; k++)
{
BYTE bt;
safearray_inp.GetElement(&k, &bt);//轉換為BYTE型陣列
if (bhexFlag)
strtemp.Format("%02X ", bt); //將字符以十六進制方式送入臨時變數strtemp存放,注意這里加入一個空隔
else
strtemp.Format("%c", bt); //將字符送入臨時變數strtemp存放
m_EditReceive += strtemp; //加入接收編輯框對應字串
}
uj5u.com熱心網友回復:
variant_inp = m_mscomm.get_Input(); //讀緩沖區
safearryay_inp = variant_inp; //VARIANT型變數轉換為ColeSafeArray型變數
len = safearryay_inp.GetOneDimSize(); //得到有效資料長度
// 接受資料
for(k=0;k<len;k++)
{
safearryay_inp.GetElement(&k,rxdata+k); //轉換為BYTE型陣列
}
Sleep(1);
for (k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k); //字符型
stremp.Format("%02X ",bt);
m_EditReceive += stremp;
}
代碼沒啥問題 除錯模式,在出錯的時候,點擊左下角的呼叫堆疊,然后從上往下雙擊,看出問題的那行代碼,能看懂的那行就是你的錯誤所在
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/106602.html
標籤:基礎類
上一篇:Qt與MFC
