对于非常大的整数值,我们如何将字符串转换为int?

mai*_*ved 7 c linux int char

我已经使用该函数atoi将字符串转换为int并且它工作正常,但是当我给出时

num = atoi (argv[1]) ;

// argv contain 4294967295 maximun value of 32 bit integer
Run Code Online (Sandbox Code Playgroud)

它给了我2147483647答案,基本上是4294967295的一半

我想这是因为它以字节为单位的差异charint.任何人都可以解释发生在位和字节上的问题以及如何修复它或将其转换为int

Zac*_*ner 5

你已经遇到了整数的最大值.由于atoi返回a int,它仅限于计算机上整数的大小.看起来你的机器使用32位int.

如果你错过了它(很容易错过),2147483647 =(2 ^ 31) - 1.记住ints可以是负数,最左边的位是那个情况下的符号位.这就是为什么你看到数字被限制在2147483647.

尝试定义numunsigned int代替int,并使用strtoul替代atoi.