码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-06-11 21:12:27      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

 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 }

 

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

标签:

原文地址:http://www.cnblogs.com/glacierh/p/4570080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!