首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 進制轉換實作:二進制、十進制、十六進制互轉

     編輯:VC 教學

前言

在嵌入式開發、通訊協定解析或除錯工具中,常需在二進制、十進制、十六進制之間互轉。MFC 的 CString 配合標準庫函式即可輕鬆完成。本文提供 BinToDec、DecToBin 兩個核心函式,並示範六種常見轉換路徑。

核心函式

1. 二進制字串 → 十進制字串

CString BinToDec(CString strBin)
{
    long nDec = 0;
    int nLen = strBin.GetLength();
    for (int i = 0; i < nLen; ++i) {
        if (strBin[nLen - i - 1] == _T('0')) continue;
        long k = 1;
        for (int j = 0; j < i; ++j) k *= 2;
        nDec += k;
    }
    CString strDec;
    strDec.Format(_T("%ld"), nDec);
    return strDec;
}

2. 十進制字串 → 二進制字串(補齊 4 位元組)

CString DecToBin(CString strDec)
{
    int nDec = _ttoi(strDec);
    CString strBin;
    if (nDec == 0) return _T("0000");

    while (nDec > 0) {
        int bit = nDec % 2;
        nDec /= 2;
        strBin.Insert(0, bit ? _T('1') : _T('0'));
    }

    // 補齊至 4 的倍數
    int pad = (4 - strBin.GetLength() % 4) % 4;
    strBin = CString(_T('0'), pad) + strBin;
    return strBin;
}

六種轉換路徑示範

來源目標程式碼片段
二進制十進制CString dec = BinToDec(_T("1110"));
十進制二進制CString bin = DecToBin(_T("14"));
二進制十六進制CString dec = BinToDec(bin); int n = _ttoi(dec); CString hex; hex.Format(_T("%X"), n);
十進制十六進制int n = 10; CString hex; hex.Format(_T("%X"), n);
十六進制十進制CString hex = _T("AF"); DWORD dw = _tcstoul(hex, NULL, 16); CString dec; dec.Format(_T("%lu"), dw);
十六進制二進制CString hex = _T("AF"); DWORD dw = _tcstoul(hex, NULL, 16); CString dec; dec.Format(_T("%lu"), dw); CString bin = DecToBin(dec);

進階:使用標準庫單一函式完成所有轉換

若不需自訂格式,可直接使用 _tcstoul、_stprintf 等:

// 任意進制字串 → 長整數
DWORD val = _tcstoul(str, NULL, base);  // base = 2, 10, 16

// 長整數 → 任意進制字串
TCHAR buf[33];
_stprintf(buf, _T("%lX"), val);  // 十六進制大寫
_stprintf(buf, _T("%ld"), val);  // 十進制
// 二進制需自行迴圈或用 bitset (C++11)

效能與限制提醒

  • 本文函式為教學用途,未處理溢位、負數、前導空白等邊界情況。
  • 大量轉換時建議改用位元運算或查表法,避免字串操作開銷。
  • 64 位元數值請改用 unsigned long long 與 %llX / %llu 格式。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved