怎样将那个TCHAR字符串转为数字?该如何处理

怎样将那个TCHAR字符串转为数字?
#include <stdio.h>
#include <windows.h>
#include  <stdlib.h>
#pragma comment (lib,"Kernel32.lib")

LONG StrToNmuber(TCHAR *str)
{
LONG lSresult=0;
int index=strlen(str);
while (str[index])
{
lSresult=lSresult*10+str[index];
index++;
}
return lSresult;
}
int main()
{
TCHAR szDirName[MAX_PATH];                                                                                      
ULARGE_INTEGER dwFreeAvailSpace,dwTotalSpace,dwTotalFreeSpace;
TCHAR dwFA[MAX_PATH],dwTS[MAX_PATH],dwTFS[MAX_PATH];
printf("Please input your volume:");
scanf("%s",&szDirName);
LONG lResult=GetDiskFreeSpaceEx(szDirName,&dwFreeAvailSpace,&dwTotalSpace,&dwTotalFreeSpace);
if (!lResult)
{
return -1;
printf("The error is %d\n",GetLastError());
}
else
{
wsprintf(dwFA,"%I64d",dwFreeAvailSpace);
wsprintf(dwTS,"%I64d",dwTotalSpace);
                                           wsprintf(dwTFS,"%I64d",dwTotalFreeSpace);

printf("The available free space is %ld Byte\n",StrToNmuber(dwFA));
printf("The total space is %s Byte\n",dwTS);
printf("The total free space is %s Byte\n",dwTFS);

}
return 0;

}
StrToNumber函数转换出阿狸变成"0"了.求解...主要是想运用那串数字进行运算....(atoi已经试过)
------解决思路----------------------
直接
printf("The available free space is %u Byte\n",dwFreeAvailSpace);
不就行了嘛,为什么还要绕一圈呢?

------解决思路----------------------
楼主这代码,改进空间太多了。

int main()
{
    TCHAR szDirName[MAX_PATH];
    ULARGE_INTEGER dwFreeAvailSpace, dwTotalSpace, dwTotalFreeSpace;
    _tprintf(TEXT("Please input your volume:"));
    _tscanf(TEXT("%s"), &szDirName);

    LONG lResult = ::GetDiskFreeSpaceEx(szDirName,
            &dwFreeAvailSpace, &dwTotalSpace, &dwTotalFreeSpace);
    if (!lResult)
    {
        _tprintf(TEXT("The error is %d\n"), ::GetLastError());

        return -1;
    }
    else
    {
        _tprintf(TEXT("The available free space is %I64d Byte\n"), dwFreeAvailSpace);
        _tprintf(TEXT("The total space is %I64d Byte\n"), dwTotalSpace);
        _tprintf(TEXT("The total free space is %I64d Byte\n"), dwTotalFreeSpace);

        return 0;
    }
}

------解决思路----------------------
如果你实在要固执的用你的设计思路,那么你的 StrToNmuber 方法要改:
__int64 StrToNmuber(TCHAR *str)
{
    __int64 ui = 0;
    size_t len = _tcslen(str), i = 0;
    while (i < len)
    {
        ui = ui * 10 + str[i] - 0x30;
        i++;
    }
    return ui;
}

------解决思路----------------------
循环里这个地方有点问题吧?index是字符串的长度,while (str[index])第一次循环的时候,已经是字符串末尾了。
先把TCHAR 字符串转成AnsiString字符串,再把AnsiString转成char *字符串,再用atoi转成数,你看行吗?

LONG StrToNmuber(TCHAR *str)
{
   AnsiString b=str;
   char * str1=b.c_str();

   LONG lSresult=atoi(str);

   return lSresult;

}