您的位置:首页 > 编程语言 > C语言/C++

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

2016-10-07 23:09 375 查看
方法一:

推荐 直接除以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');
else
str += ('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;
else
hexStr += ('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;
}
else
hexStr += ('A' + temp - 10);
}
}
cout << hexStr << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++