C:如何将字符串转换为 long int 格式的 int
C: How do I convert a string to int which will be in long int format
我想将字符串 "12341234123412341234"
转换为 int,但是当我使用 atoi 时 returns -1
char n[100] = "12341234123412341234";
printf("%d",atoi(n));
returns -1
如果我使用 %ld
或 %lld
它 returns 一个垃圾值
char n[100] = "12341234123412341234";
printf("%lld",atoi(n)); //even if i use %ld it returns the same value
returns 4294967295
你要的函数是strtol
:
char n[100] = "12341234123412341234";
printf("%llu", strtoull(n, NULL, 10));
atoi
return 一个 int
。在典型的 32 位或 64 位架构(32 位 int
)上可以具有的最大值是 2147483647
。因此,在您的情况下 atoi
会 return 取决于实现,但我们可以相当确定它不会 12341234123412341234
试图告诉 printf
传递给它的参数是 long
或 long long
使用 "%ld"
或 "%lld"
也不起作用。它不会改变 atoi
return 是 int
的事实,这就是传递给 printf
的事实。因此,除了来自 atoi
的 return 值不是您想要的之外,您还对传递给 printf
的数据类型撒谎。对着你的电脑撒谎没有任何好处。此外 long
和 long long
通常也不能保持值 12341234123412341234
。
uint64_t
的整数类型可以保存从 0
到 18446744073709551615
的值,这应该适用于您的情况。通常 uint64_t
与 unsigned long long
相同,您可以使用 strtoull
解析:
const char *n = "12341234123412341234";
char *end;
unsigned long long v = strtoull(n, &end, 10);
printf ("%llu\n", v);
自然地,如果字符串 n
来自不受信任的来源,一个健壮的程序应该检查指针 end
是否存在解析错误。
有关详细信息,请参阅 man strtoull
。
您还应该查看 INT_MAX
和 ULLONG_MAX
(以及其他 *_MAX
)以了解您的架构。
我想将字符串 "12341234123412341234"
转换为 int,但是当我使用 atoi 时 returns -1
char n[100] = "12341234123412341234";
printf("%d",atoi(n));
returns -1
如果我使用 %ld
或 %lld
它 returns 一个垃圾值
char n[100] = "12341234123412341234";
printf("%lld",atoi(n)); //even if i use %ld it returns the same value
returns 4294967295
你要的函数是strtol
:
char n[100] = "12341234123412341234";
printf("%llu", strtoull(n, NULL, 10));
atoi
return 一个 int
。在典型的 32 位或 64 位架构(32 位 int
)上可以具有的最大值是 2147483647
。因此,在您的情况下 atoi
会 return 取决于实现,但我们可以相当确定它不会 12341234123412341234
试图告诉 printf
传递给它的参数是 long
或 long long
使用 "%ld"
或 "%lld"
也不起作用。它不会改变 atoi
return 是 int
的事实,这就是传递给 printf
的事实。因此,除了来自 atoi
的 return 值不是您想要的之外,您还对传递给 printf
的数据类型撒谎。对着你的电脑撒谎没有任何好处。此外 long
和 long long
通常也不能保持值 12341234123412341234
。
uint64_t
的整数类型可以保存从 0
到 18446744073709551615
的值,这应该适用于您的情况。通常 uint64_t
与 unsigned long long
相同,您可以使用 strtoull
解析:
const char *n = "12341234123412341234";
char *end;
unsigned long long v = strtoull(n, &end, 10);
printf ("%llu\n", v);
自然地,如果字符串 n
来自不受信任的来源,一个健壮的程序应该检查指针 end
是否存在解析错误。
有关详细信息,请参阅 man strtoull
。
您还应该查看 INT_MAX
和 ULLONG_MAX
(以及其他 *_MAX
)以了解您的架构。