整数文字“255”在存储到 'Int8' 时溢出
Integer literal '255' overflows when stored into 'Int8'
我有以下代码,但出现以下错误。 整数文字“255”在存储到 'Int8'
时溢出
func decodeIDArrayItem(index:Int, tokenArray:UnsafeMutablePointer<CChar>){
var value = tokenArray[index * 4] & 0xFF
value <<= 8;
value |= tokenArray [index * 4 + 1] & 0xFF
value <<= 8;
value |= tokenArray [index * 4 + 2] & 0xFF
value <<= 8;
value |= tokenArray [index * 4 + 3] & 0xFF
}
有什么想法吗?
func decodeIDArrayItem(index:Int, tokenArray:UnsafeMutablePointer<CChar>) -> UInt32{
var value:UInt32 = UInt32(tokenArray[index * 4]) & 0xFF
value <<= 8
value |= UInt32(tokenArray [index * 4 + 1]) & 0xFF
value <<= 8
value |= UInt32(tokenArray [index * 4 + 2]) & 0xFF
value <<= 8
value |= UInt32(tokenArray [index * 4 + 3]) & 0xFF
return value
}
我希望您正在尝试将 8 位数据提取为 32 位格式。你遇到问题是因为 signed char。无论如何尝试使用 UInt32,它都会正常工作。
希望以下代码对您有所帮助。
func decodeIDArrayItem(index:Int, tokenArray:UnsafeMutablePointer<CChar>) -> UInt32{
// convert into 4 byte
// tokenArray[index * 4] of type UInt8 formate
var value:UInt32
let byte1 : UInt32 = UInt32(tokenArray[index * 4]) // 0 index
let byte2 : UInt32 = UInt32(tokenArray[index * 4 + 1])<<8 // 1 index
let byte3 : UInt32 = UInt32(tokenArray[index * 4 + 2])<<16 // 2 index
let byte4 : UInt32 = UInt32(tokenArray[index * 4 + 2])<<32 // 3 index
value = byte1 | byte2 | byte3 | byte4
return value
}
哈哈!这对我有用
Int8(0xff & 0xff)
不错的小技巧
我有以下代码,但出现以下错误。 整数文字“255”在存储到 'Int8'
时溢出func decodeIDArrayItem(index:Int, tokenArray:UnsafeMutablePointer<CChar>){
var value = tokenArray[index * 4] & 0xFF
value <<= 8;
value |= tokenArray [index * 4 + 1] & 0xFF
value <<= 8;
value |= tokenArray [index * 4 + 2] & 0xFF
value <<= 8;
value |= tokenArray [index * 4 + 3] & 0xFF
}
有什么想法吗?
func decodeIDArrayItem(index:Int, tokenArray:UnsafeMutablePointer<CChar>) -> UInt32{
var value:UInt32 = UInt32(tokenArray[index * 4]) & 0xFF
value <<= 8
value |= UInt32(tokenArray [index * 4 + 1]) & 0xFF
value <<= 8
value |= UInt32(tokenArray [index * 4 + 2]) & 0xFF
value <<= 8
value |= UInt32(tokenArray [index * 4 + 3]) & 0xFF
return value
}
我希望您正在尝试将 8 位数据提取为 32 位格式。你遇到问题是因为 signed char。无论如何尝试使用 UInt32,它都会正常工作。 希望以下代码对您有所帮助。
func decodeIDArrayItem(index:Int, tokenArray:UnsafeMutablePointer<CChar>) -> UInt32{
// convert into 4 byte
// tokenArray[index * 4] of type UInt8 formate
var value:UInt32
let byte1 : UInt32 = UInt32(tokenArray[index * 4]) // 0 index
let byte2 : UInt32 = UInt32(tokenArray[index * 4 + 1])<<8 // 1 index
let byte3 : UInt32 = UInt32(tokenArray[index * 4 + 2])<<16 // 2 index
let byte4 : UInt32 = UInt32(tokenArray[index * 4 + 2])<<32 // 3 index
value = byte1 | byte2 | byte3 | byte4
return value
}
哈哈!这对我有用
Int8(0xff & 0xff)
不错的小技巧