数据的进制转换

/***************************************************************
*     函数作用:进行数据的进制转换
*
*     参数:  
*          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;
}

如有错误,请指出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值