从字符串转换大型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?