存储到'Int8'时,整数文字'255'溢出

时间:2017-12-15 10:40:34

标签: ios xcode swift3

我有以下代码,我收到以下错误。 整数文字'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

}

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

}

答案 1 :(得分:0)

我希望您尝试将8位数据提取为32位格式。你因为签名的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



}