怎样将那个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);
不就行了嘛,为什么还要绕一圈呢?
------解决思路----------------------
楼主这代码,改进空间太多了。
------解决思路----------------------
如果你实在要固执的用你的设计思路,那么你的 StrToNmuber 方法要改:
------解决思路----------------------
循环里这个地方有点问题吧?index是字符串的长度,while (str[index])第一次循环的时候,已经是字符串末尾了。
先把TCHAR 字符串转成AnsiString字符串,再把AnsiString转成char *字符串,再用atoi转成数,你看行吗?
#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;
}