2017-12-15 15 views
0

次のコードがあり、次のエラーが表示されます。 整数リテラル '255' オーバーフロー 'INT8''Int8'に格納すると整数リテラル '255'がオーバーフローします

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

'UInt8'は0と255の間でなければなりません'〜127 -128の間Int8'があるべき、あなたの代わりに探しているものということでしょうか? UInt32として 'value'を定義しますか? – Larme

+0

はい私はUInt32(tokenArray [index * 4])&0xFFにしたときに、UInt32(tokenArray [index * 4]&0xFF) –

答えて

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 

} 
0

私は、32ビットのフォルメートに8ビットのデータを抽出しようとします。署名された文字のためにあなたの問題を得る。どんな方法でもUInt8を試してみてください。正常に動作します。 私はコードがあなたを助ける以下のホップ

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 



} 
関連する問題