【问题标题】:Converting large string of numbers (14 digits) to integer or long in C在C中将大串数字(14位)转换为整数或长整数
【发布时间】:2016-01-05 17:29:55
【问题描述】:

我有一个包含 14 位数字的字符串。

我想将字符串转换为 int。

当我使用 atoi(stringName) 时,我得到了最大 32 位的限制。

例子:

String1 包含“201400000000”

long long tempNum1;
tempNum1 = atoi(String1);
printf("%d",tempNum1);

输出为:2147483647

我怎样才能把这个字符串变成一个数字?我想将它与其他数字字符串进行比较,找出最大的。 (我有三个14位数字的字符串,我想找出哪个最小,哪个最大)。

【问题讨论】:

  • 我想知道你期待tempNum1 = sprintf(String1,NULL,10); 做什么。
  • 从它的名字atoi 可以猜到只处理int。您可能想改用strtoll
  • 应该是 printf("%llu",tempNum1);并使用 strtoI 进行字符串到长的转换
  • long 在 Windows 和大多数 32 位 *nix 操作系统上仍然是 32 位。只有long long 保证至少有 64 位
  • 谢谢大家。 strtoll 工作。还要感谢@user2979190 提到格式说明符!

标签: c arrays string int long-integer


【解决方案1】:

试试

 sscanf( String1, "%lld", &TempNum1);

请注意,格式说明符 %lld 适用于 C99,如果不是 C99,请查看编译器的文档

【讨论】:

    【解决方案2】:

    atoi 返回一个int

    int 已分配给 long long,但此时已达到限制。

    您想使用返回long longatoll

    而且您的 printf 格式说明符不适合您的类型。

    【讨论】:

    【解决方案3】:

    你可以这样尝试使用strol:

    long strtol (const char *Str, char **EndPoint, int Base)
    

    long long strtoll( const char *restrict str, char **restrict str_end, int base );
    

    阿托伊说:

    调用 atoi(str) 应相当于:

    (int) strtol(str, (char **)NULL, 10)
    

    除了错误的处理可能不同。 如果该值不能 表示,行为未定义

    【讨论】:

    • 这在我的 32 位系统上会失败。
    【解决方案4】:

    由于您的目标是long long int,您可以使用strtoll 函数:

    #include <stdlib.h>
    
    long long tempNum1 = strtoll(String1, NULL, 10);
    

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 2012-04-06
      • 2011-09-13
      相关资源
      最近更新 更多