存储到'Int'异常中时如何解决Integer文字'2147483648'溢出?

tp2376
let stringData = "84121516"  // this is 4 bytes data
let value = self.checkHexToInt(stringData: stringData)
 func checkHexToInt(stringData: String) -> Int? {
    guard let num = Int(stringData, radix: 16) else {
      return nil
    }
    return Int(num)
  }


// values is 2215777558 But I need most significant bit only

let checkEngineLightOn = ((value! & 0x80000000) > 0);

当我这样做时,我得到一个例外,说“存储在'Int'中的整数文字'2147483648'溢出了”

当我这样做时,我期望得到的是对还是错。还是要从Int Value中获得最高有效位的其他方法?

瓦瓦瓦玛

正如@OOPer在注释中指出的那样,在32位系统上Int为32位,并且您的值大于Int32.max由于您要解码4个字节,因此可以使用UInt32

func checkHexToUInt32(stringData: String) -> UInt32? {
    return UInt32(stringData, radix: 16)
}

let stringData = "84121516"  // this is 4 bytes data
let value = self.checkHexToUInt32(stringData: stringData)
let checkEngineLightOn = ((value! & 0x80000000) > 0)

注:UInt32(_:radix:)返回的UInt32?nil如果转换失败,所以没有理由guardreturn nil,只是返回转换的价值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章