我从命令行读取值 300000000000,并使用 atoi 将其转换为int64_t但它输出了错误的值。
int main(int argc, char * const argv[]){
int64_t timeSlice = -1;
if(argc == 4){
timeSlice = atoi(argv[1])
cout<<"timeslice: "<<timeSlice<<endl;
}
}
我在数字上运行我的程序300000000000
预期输出:timeSlice: 300000000000
实际输出:timeslice: -647710720
我什至尝试使用字符串流并且可以工作,但是当我将时间片传递给另一个函数时,该函数中的值仍然错误
使用strtoll
函数:
timeSlice = strtoll(argv[1], nullptr, 10);
这实际上取决于您使用的是 32 位还是 64 位系统,以及您使用的是 Windows 还是 Linux
Atoi,Atol,Strtol和Strold都将在32位可执行文件上返回32位数字。
环礁,strtoll 将在 32 位和 64 位可执行文件上返回 64 位数字
atol,strtol,strtold 将在 64 位 Windows 可执行文件上返回 32 位数字,但在 64 位 Linux 可执行文件上返回 64 位数字。
在 64 位 Windows 可执行文件上,long=int,64 位 linux 可执行文件 long=long long