您的位置:首页 > 编程语言 > C语言/C++

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

2012-08-21 11:51 671 查看
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);

只是简单写了一下,没有考虑效率问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: