微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C:如何将字符串转换为长整数格式的整数

如何解决C:如何将字符串转换为长整数格式的整数

我想将字符串 "12341234123412341234" 转换为 int,但是当我使用 atoi 时它返回 -1

char n[100] = "12341234123412341234";
printf("%d",atoi(n));

返回 -1

如果我使用 %ld%lld,它会返回一个垃圾

char n[100] = "12341234123412341234";
printf("%lld",atoi(n)); //even if i use %ld it returns the same value

返回 4294967295

解决方法

你想要的函数是strtol

char n[100] = "12341234123412341234";
printf("%llu",strtoull(n,NULL,10));
,

atoi 返回一个 int。在典型的 32 位或 64 位体系结构(具有 32 位 int)上可以具有的最大值是 2147483647。因此,在您的情况下 atoi 会返回什么取决于实现,但我们可以相当确定它不会是 12341234123412341234

试图告诉 printf 传递给它的参数是 longlong long,使用 "%ld""%lld" 也不起作用。它不会改变 atoi 返回 int 的事实,这就是传递给 printf 的内容。因此,除了 atoi 的返回值不是您想要的之外,您还在对传递给 printf 的数据类型撒谎。对你的电脑撒谎没有什么好处。除了 longlong long 通常也不能保存值 12341234123412341234

uint64_t 的整数类型可以保存从 018446744073709551615 的值,这应该适用于您的情况。通常 uint64_tunsigned 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_MAXULLONG_MAX(以及其他 *_MAX)以了解您的架构。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。