怎样编程实现16进制数转10进制数?

freechopsticks 2005-10-23 05:55:45
我想请问的是,若用一个函数实现这个功能,是不是将16进制的数字作为输入,再返回相应的10进制值?
另外,16进制数在程序中如何表示呢,是用一个数组还是一个常量字符串呢?
函数的声明可不可以这么写:
int HexToDec(const char *pValue);?
...全文
548 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
freechopsticks 2005-10-23
  • 打赏
  • 举报
回复
这个算法我还得好好看一下,一时半会看不懂。
如果就事论事,不用那个通用算法呢?
比如说,先得出字符串的长度,再用我们所知的那个乘上多少次幂的方法?
llf_hust 2005-10-23
  • 打赏
  • 举报
回复
参考一下,这个算法是输入M进制的数转换成N进制的算法
freechopsticks 2005-10-23
  • 打赏
  • 举报
回复
如果是字符串怎么处理呢,谢谢?
llf_hust 2005-10-23
  • 打赏
  • 举报
回复
//进制转换的辅助函数(helper)
//将一个字符转换成相应的十进制数字,以进行十进制运算
int Algorithms::ToInt(const char& ch)
{
if(ch >= '0' && ch <= '9')
{
return ch - '0';
}
else if(ch > '9' && ch < 'g')
{
return tolower(ch) - 'a' + 10;
}
else
{
return -1;
}
}

//上面函数的逆过程
char Algorithms::ToChar(const int& i)
{
if(i >= 0 && i <= 9)
{
return (char)(i + '0');
}
else
{
return (char)(i - 10 + 'a');
}
}


//实现进制转换,从N进制转换到M进制
//实现思想:转换成为熟悉的十进制数
//N进制的数XkXk-1...X2X1X0转换成十进制数的方法为:
//temp = X0 * N^0 + X1 * N^1 + ...
void Algorithms::Tran()
{
string param = "";//用于存放用户输入的数
string cM = "";
string cN = "";
int M = 0;//目的基数
int N = 0;//原基数
char ch = '\0';

string s= "";//用于存放结果
int temp= 0;//存放十进制数
int length= 0;
int j= 0;
int other= 0;
int i= 0;
do
{
cout<<"请输入一个整数和他的基数以及要转换的基数:"<<endl;

cin>>param>>cN>>cM;

length =param.size();
N = atoi(cN.c_str());
M = atoi(cM.c_str());


if(N < 2 || M < 2 || N > 16 || M > 16)
{
cout<<"基数错误!"<<endl;
goto exit;
}//基数错误

temp = 0;
for(i = 0; i < length; i++)
{
j = length - 1 - i;
other = Algorithms::ToInt(param[i]);//将字符转化成数

if(other >= N || other == -1)
{
cout<<"数字必须小于基数!"<<endl;
goto exit;
}

temp += other * pow(N, j);//将N进制数转换成十进制数的核心技术
}

s.erase(s.begin(), s.end());//结果容器清零

while(temp != 0)
{
s += (Algorithms::ToChar(temp % M));//将十进制数转换成M进制数的核心技术
temp = temp / M;

}

for(i = s.length() - 1; i >= 0; i--)
{
cout<<s[i];
}//用于输出
cout<<endl;
exit:cout<<"继续?(y/n)";
cin>>ch;
}while(tolower(ch) == 'y');//继续与否
}

qc_jrj 2005-10-23
  • 打赏
  • 举报
回复
16进制的数是字符串还是整型变量?
整型变量的话就不用转了。

int iNum;
char szHex[16];
strcpy( szHex, "AA" );
sscanf( szHex, "%X", &iNum );

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧