• 二进制值和十六进制字符串相互转换的C++代码


     1 #include <iostream>
     2 #include <string>
     3 #include <stdint.h>
     4 
     5 using namespace std;
     6 
     7 string BinToHex(const string &strBin, bool bIsUpper = false)
     8 {
     9     string strHex;
    10     strHex.resize(strBin.size() * 2);
    11     for (size_t i = 0; i < strBin.size(); i++)
    12     {
    13         uint8_t cTemp = strBin[i];
    14         for (size_t j = 0; j < 2; j++)
    15         {
    16             uint8_t cCur = (cTemp & 0x0f);
    17             if (cCur < 10)
    18             {
    19                 cCur += '0';
    20             }
    21             else
    22             {
    23                 cCur += ((bIsUpper ? 'A' : 'a') - 10);
    24             }
    25             strHex[2 * i + 1 - j] = cCur;
    26             cTemp >>= 4;
    27         }
    28     }
    29 
    30     return strHex;
    31 }
    32 
    33 string HexToBin(const string &strHex)
    34 {
    35     if (strHex.size() % 2 != 0)
    36     {
    37         return "";
    38     }
    39 
    40     string strBin;
    41     strBin.resize(strHex.size() / 2);
    42     for (size_t i = 0; i < strBin.size(); i++)
    43     {
    44         uint8_t cTemp = 0;
    45         for (size_t j = 0; j < 2; j++)
    46         {
    47             char cCur = strHex[2 * i + j];
    48             if (cCur >= '0' && cCur <= '9')
    49             {
    50                 cTemp = (cTemp << 4) + (cCur - '0');
    51             }
    52             else if (cCur >= 'a' && cCur <= 'f')
    53             {
    54                 cTemp = (cTemp << 4) + (cCur - 'a' + 10);
    55             }
    56             else if (cCur >= 'A' && cCur <= 'F')
    57             {
    58                 cTemp = (cTemp << 4) + (cCur - 'A' + 10);
    59             }
    60             else
    61             {
    62                 return "";
    63             }
    64         }
    65         strBin[i] = cTemp;
    66     }
    67 
    68     return strBin;
    69 }
    70 
    71 int main()
    72 {
    73     string strBin = "!@#$%^&*()_+~`1234567890-=";
    74     string strHex = "21402324255E262A28295F2B7E60313233343536373839302D3D";
    75 
    76     string strBinToHex = BinToHex(strBin);
    77     cout << strBinToHex << endl;
    78     strBinToHex = BinToHex(strBin, true);
    79     cout << strBinToHex << endl;
    80 
    81     string strHexToBin = HexToBin(strHex);
    82     cout << strHexToBin << endl;
    83 
    84     return 0;
    85 }
  • 相关阅读:
    PHP深度学习参考地址
    随手记两个链接,关于自适应屏幕显示的
    数据库查询,指定查询结果某列为固定值
    $('#id").load
    【转】Caused by: android.os.NetworkOnMainThreadException错误解决办法
    @Autowired注入DAO对象为NULL
    1-sqoop
    1-kylin架构
    1-kudu架构原理读写流程
    2、apache druid界面说明
  • 原文地址:https://www.cnblogs.com/glacierh/p/4570080.html
Copyright © 2020-2023  润新知