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
如果转换失败,所以没有理由guard
和return nil
,只是返回转换的价值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句