【发布时间】:2016-12-16 10:40:23
【问题描述】:
看似微不足道的事情却给我带来了很多问题。我正在尝试将大整数从字符串转换为 Int 类型。基本上我有一个 64 位散列,它在某一时刻作为字符串传递,我需要将它转换回 Int。
根据我能找到的所有文档,在 Swift 中,Int 类型是 64 位。调用, Int(str) 应该可以很好地处理 64 位转换。但似乎它正试图将其转换为 32 位整数,所以我收到一个 nil 值。由于各种原因,我无法使用 Int64()(长话短说,我的哈希表中的键必须是 Int 类型而不是 Int64)。
代码如下:
在课程开始时声明:
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 上运行,结果相同。
任何帮助将不胜感激。谢谢!
【问题讨论】:
-
这不是转换问题,可能您的
kv[0]值为零 -
我希望是这样,但是打印出 kv[0] 给了我我放在那里的值
-
Int 在所有 32 位设备(例如 iPhone 4、5)上为 32 位,在 64 位设备(例如 iPhone 5S、6)上为 64 位。所以你的代码应该在 64 位设备上运行,但在 32 位设备上会失败。
-
@MartinR 所以为了支持 iPhone 5,我必须使用 Int64?
-
hashValue()返回Int,因此是 32 位或 64 位。请注意,传递散列值是没有意义的,它在不同的调用之间不稳定(特别是依赖于平台)。
标签: swift string int 32bit-64bit