1 #include <iostream>
 2 #include <string>
 3 #include <stdint.h>
 4 using namespace std;
 5 //二进制转十六进制
 6 string BinToHex(const string &strBin)
 7 {
 8     string strHex;
 9     bool bIsUpper = false;
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         return strHex;
29     }
30 }
31 //十六进制转二进制
32 string HexToBin(const string &strHex)
33 {
34     if (strHex.size() % 2 != 0)
35     {
36         return "";
37     }
38     string strBin;
39     strBin.resize(strHex.size() / 2);
40     for (size_t i = 0; i < strBin.size(); i++)
41     {
42         uint8_t cTemp = 0;
43         for (size_t j = 0; j < 2; j++)
44         {
45             char cCur = strHex[2 * i + j];
46             if (cCur >= '0' && cCur <= '9')
47             {
48                 cTemp = (cTemp << 4) + (cCur - '0');
49             }
50             else if (cCur >= 'a' && cCur <= 'f')
51             {
52                 cTemp = (cTemp << 4) + (cCur - 'a' + 10);
53             }
54             else if (cCur >= 'A' && cCur <= 'F')
55             {
56                 cTemp = (cTemp << 4) + (cCur - 'A' + 10);
57             }
58             else
59             {
60                 return "";
61             }
62         }
63         strBin[i] = cTemp;
64     }
65     return strBin;
66 }
67 }
12-20 07:12