二进制十六进制转换 (C++版)
2015-06-27 09:42
573 查看
#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; } 【转载】http://www.cnblogs.com/glacierh/p/4570080.html
相关文章推荐
- C++中 模板Template的使用
- Effective C++ 条款23
- 495个C语言问题读书笔记一
- C++链表
- C++对象内存分布(3) - 菱形继承(virtual)
- C++ 关于 CMFCPropertyGridCtrl 的使用方法 之二 (原创)
- C++经典面试题(一)
- c++构造函数详解
- C++ 重写重载重定义区别
- C++常见错误大全
- C语言随机数
- 非诚勿扰
- 浅谈线程同步方法性能比较
- C++ 中 static 的用法总结
- 《鸡啄米C++编程入门系列》系列技术文章整理收藏
- 关于C++中STL的erase用法
- 简易C语言学生成绩管理系统
- [C++]接收行数和字符输出图形
- c++学习(1)
- 【leetcode c++】66 Plus One