VC++ 中实现进制2进制,10进制,16进制的相互转换

二进制与十六进制转换
本文提供了从二进制到十进制、从十进制到二进制、从二进制到十六进制及从十六进制到十进制等不同进制间转换的C++代码实现。此外,还介绍了如何通过中间步骤完成从十六进制到二进制的转换。
 

【转】

下面是一个图例表示转换过程使用的函数

                                        BinToDec                 CString::Format
                               2 --------------------------> 10 ---------------------------> 16
                               2 <-------------------------- 10 <--------------------------- 16
                                        DecToBin                        strtoul 

1. 2 进制 -----> 10 进制

CString BinToDec(CString strBin)

{

    CString strDec;

    long nDec = 0, nLen;

    int i, j, k;

     

    nLen = strBin.GetLength();

    for (i=0; i<nLen; i++)

    {

        if ( strBin[nLen-i-1] == '0' )

            continue;

        else

        {

            k = 1;

            for(j=0; j<i; j++)

                k = k * 2;

            nDec += k;

        }         

    }

 

    strDec.Format("%ld", nDec);

 

    return strDec;

}

2. 10 进制 -----> 2 进制

CString DecToBin(CString strDec)

{

    int nDec = atoi(strDec);

    int nYushu, nShang;

    CString strBin = _T(""), strTemp;

    TCHAR buf[2];

    BOOL bContinue = TRUE;

 

    while ( bContinue )

    {

        nYushu = nDec % 2;

        nShang = nDec / 2;

        sprintf(buf, "%d", nYushu);

        strTemp = strBin;

        strBin.Format("%s%s", buf, strTemp);

        nDec = nShang;

        if ( nShang == 0 )

            bContinue = FALSE;

    }

     

    int nTemp = strBin.GetLength()%4;

    switch(nTemp) 

    {

    case 1:

        strTemp.Format(_T("000%s"), strBin);

        strBin = strTemp;

        break;

    case 2:

        strTemp.Format(_T("00%s"), strBin);

        strBin = strTemp;

        break;

    case 3:

        strTemp.Format(_T("0%s"), strBin);

        strBin = strTemp;

        break;

    default:

        break;

    }

 

    return strBin;

}

3. 2进制 -----> 16进制

   2进制先转换为10进制,再转换为16进制

    CString strDec, strBin, strHex;

    strBin = _T("1110");

    strDec = BinToDec(strBin);

    int nDec;

    nDec = atol(strDec);

    strHex.Format(_T("%x"), nDec);  

4. 10 进制 -----> 16 进制

    int nDec = 10;

    CString str;

    str.Fomat(_T("%x"), nDec);

5. 16 进制 -----> 10 进制

    CString strDec, strHex;

    strHex = _T("af");

    DWORD dwHex = strtoul(strHex, NULL, 16);

    strDec.Format(_T("%ld"), dwHex);

6. 16 进制 -----> 2 进制

    16进制先转换为10进制,再转换为2进制

  

    CString strDec, strBin, strHex;

    strHex = _T("af");

    DWORD dwHex = strtoul(strHex, NULL, 16);

    strDec.Format(_T("%ld"), dwHex);

    strBin = DecToBin(strDec);

只是简单写了一下,没有考虑效率问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值