zoukankan      html  css  js  c++  java
  • Hex string convert to Binary String and Vise-Versa(16进制和2进制字符串的相互转换)

    这个转换在我们日常的编码中还是很有机会遇到的,这里贴出来和大家分享探讨。

    void pu_hex_to_binary(std::string strHex, std::string &strBinaryResult)
    {
        for ( int i = 0; i < strHex.size(); ++ i )  {
            char chTemp = strHex[i];
            int chHexValue;
            if ( 'F' >= chTemp && chTemp >= 'A' )
                chHexValue = chTemp - 'A' + 10;
            else if ( 'f' >= chTemp && chTemp >= 'a' )
                chHexValue = chTemp - 'a' + 10;
            else
                chHexValue = chTemp - '0';
    
            std::string strBinary;
            char iBit = 4;
            while( iBit > 0 ) {
                if ( chHexValue % 2 == 0 )
                    strBinary.push_back('0');
                else
                    strBinary.push_back('1');
                if ( chHexValue > 0 )
                    chHexValue >>= 1;
                -- iBit;
            }
            std::reverse(strBinary.begin(), strBinary.end());
            strBinaryResult.append( strBinary );
        }
    }
    
    void pu_binary_to_hex(std::string strBinary, std::string &strHex )
    {
        int chHexValue = 0;
        strHex.clear();
        for ( int i = 0; i < strBinary.size(); )  {
            std::string strSubBinary;
            if (strBinary.size() - i >= 4)    {
                strSubBinary = strBinary.substr(i, 4);
                i += 4;
            }
            else
            {
                strSubBinary = strBinary.substr(i);
                i = strBinary.size();
            }
            std::reverse(strSubBinary.begin(), strSubBinary.end());
    
            chHexValue = 0;
            for (int j = 0; j < strSubBinary.size(); ++j)    {
                char chTemp = strSubBinary [ j ];
                char chBinaryValue = chTemp - '0';
    
                if (chBinaryValue % 2 == 1)
                    chHexValue += 1 << j;   
    
            }
            if (chHexValue < 10)
                strHex.push_back(chHexValue + '0');
            else
                strHex.push_back(chHexValue - 10 + 'A');
        }
    }
    

      

  • 相关阅读:
    解题报告:hdu1008 Elvator
    解题报告:hdu1003 Max Sum
    解题报告:hdu 1005 number subsequent
    矩阵快速幂
    初步
    学习笔记:矩阵的基本运算的实现
    解题报告:hdu1284 钱币兑换问题
    解题报告:hdu2191汶川地震
    解题报告:hdu1248寒冰王座
    解题报告:hdu2602 Bone collector 01背包模板
  • 原文地址:https://www.cnblogs.com/shengguang/p/5474791.html
Copyright © 2011-2022 走看看