如果是整形转换成16进制比较简单,如果是很大的一个整数呢? 比如 123456789123456789.
参考文章 http://www.cnblogs.com/phinecos/archive/2009/09/11/1564975.html
下面是基于这种思想自己实现的。
#include <iostream>
#include <vector>
#include <string>
#define HEX 16
char s[] = "0123456789ABCDEF"; //字典
//将一个整数转换成十六进制
void dec2hex(int n,std::string& strHex)
{
std::vector<int> vecRemainder;
int nTemp = n;
while(nTemp != 0)
{
vecRemainder.push_back(nTemp%HEX);
nTemp /= HEX;
}
std::vector<int>::const_iterator itor = vecRemainder.begin();
for (; itor != vecRemainder.end();itor++)
{
strHex.insert(strHex.begin(),1,s[*itor]);
}
}
//将一个大的十进制转换成十六进制
void dec2hex(std::string strDec,std::string& strHex)
{
//这一步只是把strDec字符串存到int向量中
std::string::const_iterator itor_str = strDec.begin();
std::vector<int> vecDec;
for (; itor_str != strDec.end(); itor_str++)
{
if ( '0' <= (*itor_str) && '9' >= (*itor_str))
{
vecDec.push_back(*itor_str - '0');
}
}
//用来保存每一轮的余数
std::vector<int> vecRemainder;
while ( vecDec.size() !=0)
{
std::vector<int> vecTem=vecDec;
//vecDec用来保存下一轮的商
vecDec.clear();
std::vector<int>::const_iterator itor_temp = vecTem.begin();
int nTemp = 0;
bool bStart = true;
for (;itor_temp != vecTem.end(); itor_temp++)
{
nTemp = nTemp*10 + *itor_temp;
if ( bStart && nTemp/16 <1)
{
continue;
}
bStart = false;
vecDec.push_back(nTemp/16);
if ( nTemp/16 > 0)
{
nTemp = nTemp%16;
}
}
vecRemainder.push_back(nTemp);
}
std::vector<int>::const_iterator itor = vecRemainder.begin();
for (; itor != vecRemainder.end();itor++)
{
strHex.insert(strHex.begin(),1,s[*itor]);
}
}
int main()
{
//std::string strDec = "161";
std::string strDec = "1234567891234567891";
std::string strHex;
dec2hex(strDec,strHex);
return 0;
}