【问题标题】:converting char array (c string) to _int64 in C在 C 中将 char 数组(c 字符串)转换为 _int64
【发布时间】:2011-10-31 14:23:57
【问题描述】:

我尝试使用此函数将字符串转换为 _int64,但它不起作用:

_int64 lKey = _atoi64("a1234");

lKey 值始终为零并且不起作用,除非字符串只是像“1234”这样的数字

我使用 C++ 字符串流读取解决方案,但我想用纯 C 编写我的应用程序

【问题讨论】:

  • 您希望函数对该输入执行什么操作? atoi 只使用字符串前面的数字,因此任何不以数字开头(前导空格之后)的字符串都会产生 0。strtoll 可能对您更有用。
  • 带下划线的标识符通常暗示内部使用。如果您想使用 64 位整数,则不能使用 ansi C,因此您可能希望选择 C99 并使用 strtoll。
  • 好的,我知道它工作正常。但是如何将 char 数组转换为 _int64 类型??

标签: c int64


【解决方案1】:

该功能确实有效。作为documentation states

每个函数都返回通过将输入字符解释为数字而产生的 __int64 值。如果输入无法转换为该类型的值,则 _atoi64 的返回值为 0。

所以你必须确保传递了正确的字符串。否则,返回值将始终为零。 "a1234" 就该函数而言不是正确的字符串,并且几乎每个“转储”解析函数都将无法解析它。

【讨论】:

    【解决方案2】:

    如果您认为您的号码是十六进制的,并且 C99 没问题,您可能想改用 strtoull()

    const unsigned long long value = strtoull(string, NULL, 16);
    

    或自动检测:

    const unsigned long long value = strtoull(string, NULL, 0);
    

    【讨论】:

    • 我应该包括什么?我在 Google 中找不到它。
    • strtoull() 等通过包含stdlib.h 提供。
    • 固定为strtoull 而不是strtolull
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 2018-09-02
    • 1970-01-01
    • 2021-05-03
    • 2012-10-28
    • 2015-08-01
    • 2013-10-29
    相关资源
    最近更新 更多