首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MFC 編輯框顯示十六進制數據:字節數組格式化輸出

     編輯:程式設計綜合問答

需求

串口接收字節數組 (BYTE rxdata[]),在 MFC 編輯框 (CEdit) 中以十六進制格式顯示 (如 0xA1 0xB2 0x0F)。

核心代碼

CString strHex;
for (int k = 0; k < len; k++) {
    CString byteStr;
    byteStr.Format(_T("%02X "), rxdata[k]); // 大寫十六進制,兩位補零,帶空格
    strHex += byteStr;
}
// 追加到編輯框
m_strRecvData += strHex;
SetDlgItemText(IDC_EDIT_RECV, m_strRecvData);
// 或直接追加
GetDlgItem(IDC_EDIT_RECV)->SetWindowText(m_strRecvData);

完整接收處理示例 (摘自問題代碼)

if (m_cComm.get_CommEvent() == 2) { // 接收事件
    VARIANT variant_inp = m_cComm.get_Input();
    COleSafeArray safearray_inp(variant_inp);
    long len = safearray_inp.GetOneDimSize();
    BYTE rxdata[512];
    for (long k = 0; k < len; k++) {
        safearray_inp.GetElement(&k, rxdata + k);
    }

    // 格式化為十六進制字符串
    CString strHex;
    for (long k = 0; k < len; k++) {
        CString tmp;
        tmp.Format(_T("%02X "), rxdata[k]);
        strHex += tmp;
    }
    strHex += _T("\r\n"); // 換行分隔每次接收

    // 顯示
    m_strRecvData += strHex;
    SetDlgItemText(IDC_EDIT_RECV, m_strRecvData);
    // 自動滾動到底部
    CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT_RECV);
    pEdit->SetSel(m_strRecvData.GetLength(), m_strRecvData.GetLength());
}

關鍵點

  • %02X 格式化:大寫、兩位、不足補零。
  • 每字節加空格分隔,便於閱讀。
  • 編輯框屬性勾選 Multiline、Vertical Scroll、Read-only (可選)。
  • 大數據量時考慮限制緩衝區長度或用 RichEdit 支持更大文本。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved