从字符串转换大型Int
什么似乎应该是相当微不足道的事情已经造成了我相当多的问题。 我正试图从一个字符串转换一个大整数到Int类型。 基本上我有一个64位散列,在一个点传递一个字符串,我需要将它转换回一个Int。
根据我能找到的所有文档,在Swift中Int类型是64位。 调用,Int(str)应该可以处理64位转换。 但它似乎试图将它转换为一个32位整数,所以我得到一个零值。 由于各种原因,我无法使用Int64()(长话短说我的哈希表中的键必须是Int not 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])!
失败,因为在意外时返回零值。
Int.max
返回值2147483647,即32位最大整数,考虑到所有文档状态int为64位值,这让我觉得奇怪。 代码已经在iPhones 5 - 6s上运行,所有结果都一样。
任何帮助将不胜感激。 谢谢!
Int(“string”) - 是可选类型如果您想排除零例外,请尝试以下代码:
let stingNumber = "3928953869951869841"
if let index = Int64("(stingNumber)") {
self.nameTable[index] = "a"
NSLog("(self.nameTable)")
NSLog("(Int64.max)")
}
我在iPhone 4上模拟了这一点,并且我有日志:
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
请参阅Apple开发人员文档中的Int
:
在32位平台上, Int
的大小与Int32
大小相同,在64位平台上, Int
的大小与Int64
大小相同。
3928953869951869841
超出了32位整数的范围。 因此,为了将该值存储为整数,您必须使用Int64
(或UInt64
),但UInt64
此问题(除非该应用仅限于64位设备)。
另请注意, hashValue()
的文档声明:
在程序的不同执行过程中,哈希值不能保证相等。 不要保存在将来执行期间使用的散列值。
链接地址: http://www.djcxy.com/p/24353.html上一篇: Converting large Int from String
下一篇: Any reason to use 32 bit integers for common operations on 64 bit CPU?