/***************************************************************
* 函数作用:进行数据的进制转换
*
* 参数:
* Src:需要转化的数据(字符串形式)
* SrcBase:原来数据的进制
* Det:存放转换完后的数据(字符串形式,注意要足够大)
* DetBase:转换后的数据的进制
*
* 返回值:空
*
* 注意:对于负数来说,转换后的数据等于其原来的绝对值加上负号
*
* 时间:2016-12-12
*
***************************************************************/
void ChangeBase(char *Src,int SrcBase,char *Det,int DetBase)
{
bool IsNeg = false;
char *S = Src + strlen(Src) - 1;
char *Beg = Src;
char *Temp = NULL;
int Result = 0;
int IsZeor = 0;
int Dig = 0;
int Subscript = 0;
//判断输入的数是否是零
if(*Src == '0')
{
*Det = '0';
return;
}
//判断输入的数是否是负数
if(*Src == '-')
{
IsNeg = true;
++Beg;
}
while(S >= Beg)//从后向前转换为10进制数据
{
if(*S >= '0' && *S <= '9')
{
Result += ((*S - '0')*pow(SrcBase,Dig));//'0' - '9'
}
else
{
Result += ((*S - 55)*pow(SrcBase,Dig));//'A' - 'F'
}
--S;
++Dig;
}
//除基取余,注意,余数是反着的
Subscript = 0;
while(Result)
{
Det[Subscript] = Result%DetBase;
if(Det[Subscript] <= 9)
{
Det[Subscript] += '0';
}
else
{
Det[Subscript] += 55;
}
++Subscript;
Result /= DetBase;
}
Dig = strlen(Det);
Subscript = 0;
//如果是负数的话,加负号
if(IsNeg)
{
Det[Dig] = '-';
++Dig;
}
Temp = (char*)calloc(sizeof(char),MAX_PATH);
//倒着复制数据去目的地址
while(Dig)
{
Temp[Subscript++] = Det[(Dig--) - 1];
}
memcpy(Det,Temp,strlen(Det));
free(Temp);
return;
}
如有错误,请指出