二进制值和十六进制字符串相互转换的C++代码
2015-09-15 12:34
477 查看
#include <iostream> #include <string> #include <stdint.h> using namespace std; string BinToHex(const string &strBin, bool bIsUpper = false) { string strHex; strHex.resize(strBin.size() * 2); for (size_t i = 0; i < strBin.size(); i++) { uint8_t cTemp = strBin[i]; for (size_t j = 0; j < 2; j++) { uint8_t cCur = (cTemp & 0x0f); if (cCur < 10) { cCur += '0'; } else { cCur += ((bIsUpper ? 'A' : 'a') - 10); } strHex[2 * i + 1 - j] = cCur; cTemp >>= 4; } } return strHex; } string HexToBin(const string &strHex) { if (strHex.size() % 2 != 0) { return ""; } string strBin; strBin.resize(strHex.size() / 2); for (size_t i = 0; i < strBin.size(); i++) { uint8_t cTemp = 0; for (size_t j = 0; j < 2; j++) { char cCur = strHex[2 * i + j]; if (cCur >= '0' && cCur <= '9') { cTemp = (cTemp << 4) + (cCur - '0'); } else if (cCur >= 'a' && cCur <= 'f') { cTemp = (cTemp << 4) + (cCur - 'a' + 10); } else if (cCur >= 'A' && cCur <= 'F') { cTemp = (cTemp << 4) + (cCur - 'A' + 10); } else { return ""; } } strBin[i] = cTemp; } return strBin; } int main() { string strBin = "!@#$%^&*()_+~`1234567890-="; string strHex = "21402324255E262A28295F2B7E60313233343536373839302D3D"; string strBinToHex = BinToHex(strBin); cout << strBinToHex << endl; strBinToHex = BinToHex(strBin, true); cout << strBinToHex << endl; string strHexToBin = HexToBin(strHex); cout << strHexToBin << endl; return 0; }
相关文章推荐
- c++ primer 学习笔记-第十四章
- C++ 预定义显示文件和行数的调试技术
- c++中抽象类与接口的区别
- 使用C语言操作MySQL数据库
- 如何在C++代码中遍历QML Item并修改它的属性
- Effective C++——条款37(第6章)
- C++ 'dynamic_cast' and Java 'instanceof' 使用对比
- Item 27:最小化类型转换 Effective C++笔记
- C语言不定长参数的实现 va_list
- C++11
- Effective C++ ——规则1-3
- c语言--二维数组的首地址问题
- C++ 拷贝构造函数 赋值构造函数
- OC语言中的block数据类型
- C++微专业课程辅导(内存模型和动态内存)
- 【C++】二叉树的创建方法及其遍历的递归与非递归方法总结
- 【第3周 项目2 - 建设“顺序表”算法库】
- C++Primer第五版 6.5.1节练习
- C++Primer第五版 6.4节练习
- C++模板