正文

【转】VC++ 中实现进制2进制,10进制,16进制的相互转换     2007-09-19 17:17:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sword2008/29524.html

分享到:

作者:lixiaosan日期:04/14/2006下面是一个图例表示转换过程使用的函数                                        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);只是简单写了一下,没有考虑效率问题。 Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=663070

阅读(6693) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册