我从命令行读入300000000000的值,然后用astoi把它转换为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
我甚至试过使用stringstream,它可以工作,但是当我把timeslice传给另一个函数时,该函数的值仍然是错误的。
使用 strtoll
功能。
timeSlice = strtoll(argv[1], nullptr, 10);
这实际上取决于你使用的是32位还是64位系统,以及你使用的是Windows还是Linux。
atoi, atol, strtol 和 strtold 都会在 32 位可执行文件中返回一个 32 位数字。
atoll, strtoll在32位和64位的可执行文件上都会返回一个64位的数字。
atol, strtol, strtold在64位Windows可执行文件上将返回一个32位数字,而在64位Linux可执行文件上将返回一个64位数字。
在64位的Windows可执行文件中,long=int,64位的Linux可执行文件中,long=long长。