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获得最重要的位?
答案 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
,因此没有理由guard
和return nil
,只返回转换的价值。