【问题标题】:In Swift, how do you convert a String to Int64?在 Swift 中,如何将 String 转换为 Int64?
【发布时间】:2014-11-29 05:56:04
【问题描述】:

我正在从一个数字非常大的文本文件中加载行。 String 有 toInt 方法,但是如何将字符串转换为能够处理大数字的 Int64?

我没有看到 toInt64 方法或 toLong 等。肯定有办法,但我通过搜索还没有找到任何东西。

或者,我想我可以逐位(或按数字组)读取字符串中的数字,然后将它们与适当的 10 因子相加,但这似乎有点矫枉过正。或者也许正确的方法是以二进制形式读取数据并以这种方式转换?

谢谢

【问题讨论】:

  • 如果您编译为 64 位应用程序,那么 Int 64 位整数。
  • 虽然下面的答案是完全有效的,但就我而言,@MartinR 的答案是最有帮助的。如果您将其添加为答案,我可以给您答案。

标签: xcode string swift long-integer int64


【解决方案1】:

从 Swift 2.1.1 开始,您可以简单地使用 String 初始化 Int64

let number: Int64? = Int64("42")

【讨论】:

  • 我认为 Swift 4 中没有这个词
【解决方案2】:

如果你不介意使用 NSString,你可以这样做

let str = "\(LLONG_MAX)"
let strAsNSString = str as NSString
let value = strAsNSString.longLongValue

请注意,与 toInt() 不同,如果字符串不是合法数字,longLongValue 将返回 0,而在这种情况下 toInt() 将返回 nil。

【讨论】:

  • 我正在尝试做同样的事情,但得到一个未签名的 Int64。我尝试查看 NSString,但不幸的是没有返回 UInt64 的方法。我想知道你有什么想法吗?也许这应该是一个新问题?
  • @Lightbulb1 你可以使用C函数strtoull。示例:strtoull(str, nil, 10)。第一个参数是字符串,第三个参数是要转换的基数。我不知道第二个参数dose。
【解决方案3】:
import Darwin

let strBase10 = "9223372036854775807"
let i64FromBase10 = strtoll(strBase10, nil, 10)

let strBase16 = "0xFFFFFFFFFFFFFFFF"
let i64FromBase16 = strtoll(strBase16, nil, 16)

strtoll 表示 STRingTOLongLong

http://www.freebsd.org/cgi/man.cgi?query=strtoll

【讨论】:

    【解决方案4】:
    import Darwin
    let str = ...
    let i = strtoll(str, nil, 10)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-28
      • 2015-05-27
      • 2014-08-01
      相关资源
      最近更新 更多