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

2016-02-19 20:10 13 1 收藏

给自己一点时间接受自己,爱自己,趁着下午茶的时间来学习图老师推荐的VC++ 中实现进制2进制10进制16进制的相互转换,过去的都会过去,迎接崭新的开始,释放更美好的自己。

【 tulaoshi.com - 编程语言 】

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

作者: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; inLen; i++)
    {
        if ( strBin[nLen-i-1] == '0' )
            continue;
        else
        {
            k = 1;
            for(j=0; ji; j++)
                k = k * 2;
            nDec += k;
        }        
    }
 
    strDec.Format("%ld", nDec);
 
    return strDec;
}

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

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

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

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);

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

来源:https://www.tulaoshi.com/n/20160219/1622930.html

延伸阅读
十六进制字符串与数值类型之间转换(C# 编程指南) 以下示例演示如何执行下列任务: 获取字符串中每个字符的十六进制值。 获取与十六进制字符串中的每个值对应的字符。 将十六进制 string 转换为整型。 将十六进制 string 转换为浮点型。 将字节数组转换为十六进制 string。 示例 此示例输出 string 中的每个字符的十六进制值。首先,...
虽然在任何进制数种, 0 只有一个值——那就是「零」,之所以问这个问题,纯粹是闲着蛋疼。 最近和朋友们讨论关于数的话题,他说,八进制数现在几乎从未使用过。 我一时无法反驳,确实,除了我们经常使用的十进制,在计算机中用的最多的就是二进制和十六进制了,八进制数确实很“小众”。 等我回到家仔细一琢磨,八进制,八进制,「八进制就...
标签: Web开发
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
代码如下: //====================================== //输出格式: hex2bin 5e. //得到: 0101 1110 //====================================== #include stdio.h #include limits.h char *bitstr(char *, void const *, size_t); int main(int argc, char **argv) {    unsigned char value;    char *pointer; &...
二进制浏览、编辑的实现 作者/cuick 下载源代码     前几天看到有人在论坛上寻找二进制浏览、编辑代码,自己前几天又不是很忙,就摸索着写了这个程序。以前很少做这种界面的东西,遇到不少难题,非常感谢在论坛上得到的帮助。  &nb...

经验教程

870

收藏

17
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部