swift - 从 String 转换大 Int

标签 swift string int 32bit-64bit

看似微不足道的事情却给我带来了很多问题。我正在尝试将大整数从字符串转换为 Int 类型。基本上我有一个 64 位哈希值,它在某一时刻作为字符串传递,我需要将其转换回 Int。

根据我能找到的所有文档,在 Swift 中,Int 类型是 64 位。调用 Int(str) 应该可以很好地处理 64 位转换。但它似乎试图将其转换为 32 位整数,因此我收到一个 nil 值。由于各种原因,我无法使用 Int64()(长话短说,我的哈希表中的键必须是 Int 类型而不是 Int64)。

代码如下:

在类(class)开始时声明:

var nameTable: Dictionary<Int, String> = [:]

稍后在某个函数中声明:

let kv = data[i].componentsSeparatedByString(":")
self.nameTable[Int(kv[0])!] = kv[1]

其中 kv[0]="3928953869951869841"kv[1]="a" 部分 Int(kv([0])! 失败,因为意外返回了 nil 值。

Int.max 返回值 2147483647,即 32 位最大 int,考虑到所有文档都将 int 声明为 64 位值,这让我觉得很奇怪。代码已在 iPhone 5 - 6s 上运行,结果相同。

任何帮助将不胜感激。谢谢!

最佳答案

Int("string") - 是可选类型 如果你想排除 nil 异常,请尝试以下代码:

    let stingNumber = "3928953869951869841"
    if let index = Int64("\(stingNumber)") {
        self.nameTable[index] = "a"
        NSLog("\(self.nameTable)")
        NSLog("\(Int64.max)")
    }

我在 iPhone 4s 上模拟了这个,我有日志:

2016-08-10 15:22:24.199 stackoverlow-38866748[52907:1401199] [3928953869951869841: "a"] 
2016-08-10 15:22:24.202 stackoverlow-38866748[52907:1401199] 9223372036854775807

关于swift - 从 String 转换大 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38866748/

相关文章:

c - 《C 编程语言》第二版 K&R 第 1 章 1.5.1 中的示例,

ios - EA showBluetoothAccessoryPicker 未在 SwiftUI 中显示

javascript - 在 Javascript 中从末尾 trim 字符串

java - 将带有分隔符的字符串解析为数组

java - 从字符串中查找符号 Java

java - 为什么 Java 能够将 0xff000000 存储为 int?

swift - 如何检查时钟在两个日期之间显示了多少次整小时?

ios - watchOS,WCSession activationDidCompleteWith "activated",但无法访问

ios - 如何更改 UIDatePicker 的线条颜色

java - 如何将字符串类型的算术表达式转换为整数?