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 }