C++将10进制字符串转为16进制字符串

来源:互联网 发布:淘宝网商城女童鞋 编辑:程序博客网 时间:2024/06/14 03:10

方法一:

推荐 直接除以16进行计算 对结果递归进行转换运算

代码如下:

#include<iostream>#include <string>using namespace std;string DecIntToHexStr(long long num){string str;long long Temp = num / 16;int left = num % 16;if (Temp > 0)str += DecIntToHexStr(Temp);if (left < 10)str += (left + '0');elsestr += ('A' + left - 10);return str;}string DecStrToHexStr(string str){long long Dec = 0;for (int i = 0; i < str.size(); ++i)Dec = Dec * 10 + str[i] - '0';return DecIntToHexStr(Dec);}int main(){string DecStr;while (cin >> DecStr){cout << "0x" + DecStrToHexStr(DecStr);}return 0;}

方法二:先十进制转为二进制,然后再每四位进行合并转为16进制

代码如下:

#include<iostream>#include <string>#include<vector>#include <sstream>#include <math.h>using namespace std;int main(){string decStr;cin >> decStr;int num = stoi(decStr);vector<int>v;while (num){int bit = num % 2;v.push_back(bit);num = num / 2;}reverse(v.begin(), v.end());string hexStr;if (v.size() % 4 == 0){for (int i = 0; i < v.size() / 4; ++i){int temp = 0, k = 3;for (int j = i * 4; j < (i + 1) * 4; ++j){if (v[j] == 1)temp += pow(2, k);--k;}if (temp <= 9)hexStr += temp;elsehexStr += ('A' + temp - 10);}}else{int zeroNum = 4 - v.size() % 4;for (int i = 0; i < zeroNum; ++i)v.insert(v.begin(), 0);for (int i = 0; i < v.size() / 4; ++i){int temp = 0, k = 3;for (int j = i * 4; j < (i + 1) * 4; ++j){if (v[j] == 1)temp += pow(2, k);--k;}if (temp <= 9){stringstream ss;string strTemp;ss << temp;ss >> strTemp;hexStr += strTemp;}elsehexStr += ('A' + temp - 10);}}cout << hexStr << endl;return 0;}



0 0