clq

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一个我写的通用的很慢的整数转换为字符串的算法,哈哈

受一个网友提示,不过他的我看不懂,根据他神侃般的解释用模和除算法实现的.其实很通用,还可以再扩展,不过速度一定没法和大师们写的库函数相比 :) 别用在效率要求高的地方啊.


//最大兼容的整数转换//效率不高//2进制
std::string uitoa_2(unsigned __int64 v)
{
    std::string r = "";
    std::string z = "";

    //unsigned 不会有负数的
    //if (v<0)
    //{
    //    v = 0-v;
    //    z = '-';
    //}

    char c;
    byte b;
    unsigned __int64 d = 1;//分母
    unsigned __int64 i = 0;//当前数值

    while(1)
    {
        b = (v % (d*2))/d;
        c = b + '0';
        //if(b>9) c = b + 'A'-10;
        if (v/d == 0)break;

        r = c + r;
        d = d * 2;
    }



    return z + r;
}//



//最大兼容的整数转换//效率不高//16进制
std::string uitoa_hex(unsigned __int64 v)
{
    std::string r = "";
    std::string z = "";

    //unsigned 不会有负数的
    //if (v<0)
    //{
    //    v = 0-v;
    //    z = '-';
    //}

    char c;
    byte b;
    unsigned __int64 d = 1;//分母
    unsigned __int64 i = 0;//当前数值

    while(1)
    {
        b = (v % (d*16))/d;
        c = b + '0';
        if(b>9) c = b + 'A'-10;
        if (v/d == 0)break;

        r = c + r;
        d = d * 16;
    }



    return z + r;
}//


//最大兼容的整数转换//效率不高
std::string uitoa(unsigned __int64 v)
{
    std::string r = "";
    std::string z = "";

    //unsigned 不会有负数的
    //if (v<0)
    //{
    //    v = 0-v;
    //    z = '-';
    //}

    char c;
    byte b;
    unsigned __int64 d = 1;//分母
    unsigned __int64 i = 0;//当前数值

    while(1)
    {
        b = (v % (d*10))/d;
        c = b + '0';
        if (v/d == 0)break;

        r = c + r;
        d = d * 10;
    }



    return z + r;
}//

//最大兼容的整数转换//效率不高
std::string itoa(signed __int64 v)
{
    std::string r = "";
    std::string z = "";

    //unsigned 不会有负数的
    if (v<0)
    {
        v = 0-v;
        z = '-';
    }

    char c;
    byte b;
    unsigned __int64 d = 1;//分母
    unsigned __int64 i = 0;//当前数值

    while(1)
    {
        b = (v % (d*10))/d;
        c = b + '0';
        if (v/d == 0)break;

        r = c + r;
        d = d * 10;
    }



    return z + r;
}//

std::string string2hex(std::string v)
{
    std::string r = "";
    std::string one = "";
    

    for (size_t i=0;i<v.size();i++)
    {
        char c = v[i];
        one = uitoa_hex(c);
        if(one.size()==2)
        {
            r += one;
        }
        else
        {
            r += '0' + one;
        }
    }

    return r;
}//

posted on 2012-01-30 11:44  clq  阅读(456)  评论(1编辑  收藏  举报