template<typename T>

_TCHAR* itot(T n)

{

    static _TCHAR str[] =

    {

        _T('0'), _T('0'), _T('0'), _T(','),

        _T('0'), _T('0'), _T('0'), _T(','),

        _T('0'), _T('0'), _T('0'), _T(','),

        _T('0'), _T('0'), _T('0'), _T(','),

        _T('0'), _T('0'), _T('0'), _T(','),

        _T('0'), _T('0'), _T('0'), _T(','),

        _T('0'), _T('0'), _T('0'), _T(','),

        _T('0'), _T('0'), _T('0'), _T( 0 ),

    };


    _TCHAR* ptr = str + (sizeof str / sizeof str[0] - 2);

    _TCHAR sign = 0;

    unsigned int back = 1;

    if (n < 0) n = -n, sign = _T('-');

    do

    {

        ptr[ 0] = n       % 10 + '0';

        ptr[-1] = n /  10 % 10 + '0';

        ptr[-2] = n / 100 % 10 + '0';

        back   += (n < 100) + (n < 10);

        n /= 1000;

        ptr -= 4;

    } while(n);

    ptr += back;

    *ptr = sign;

    return ptr + !sign;

}