如何修复Integer字面值' 2147483648'存储到' Int'例外?

时间:2018-04-13 23:31:04

标签: swift byte

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);

当我这样做时,我得到了例外情况" Integer literal' 2147483648'存储到' Int'"

时会溢出

当我这样做时,我希望得到真或假。或者是其他任何从Int Value获得最重要的位?

1 个答案:

答案 0 :(得分:0)

正如@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,只返回转换的价值。