十进制转换成十六进制的问题

来源:互联网 发布:银行理财经理 知乎 编辑:程序博客网 时间:2024/05/21 21:48

如果是整形转换成16进制比较简单,如果是很大的一个整数呢?  比如 123456789123456789.

参考文章 http://www.cnblogs.com/phinecos/archive/2009/09/11/1564975.html

下面是基于这种思想自己实现的。

#include <iostream>#include <vector>#include <string>#define HEX 16char 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;}


0 0
原创粉丝点击