数据的进制转换

来源:互联网 发布:mac ffmpeg 教程脚本 编辑:程序博客网 时间:2024/06/05 20:24
/****************************************************************     函数作用:进行数据的进制转换**     参数:  *          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
原创粉丝点击