• 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');
        }
    }
    

      

  • 相关阅读:
    行锁原理 天高地厚
    unity c#
    (转)C#导出Excel源码
    c#.net]做tooltip给控件动态添加属性的做法、IExtenderProvider接口的使用
    自定义提供程序控件
    在C#中使用SQLite
    哈佛大学凌晨4点半的景象
    (转)SQLServer常见查询问题
    .NET组件编程
    窗体着色
  • 原文地址:https://www.cnblogs.com/shengguang/p/5474791.html
Copyright © 2020-2023  润新知