1
NSURLConnection
を使用して私のアプリでUIImageにビデオをストリーミングしています。Objective CからSwiftに変換した後、ビットシフトUInt8を発行します
- 私はpayloadsizeがuint8に変換するための最良の方法のわからない:私はここに二つの問題が生じています
func connection(connection: NSURLConnection, didReceiveData data: NSData) { //...other code UInt32 sizeOfJPEG_1; //same type as was in Objective C var payloadsize = [UInt8](count: 4, repeatedValue: 0x00) //was uint8_t in Objective C data.getBytes(&payloadsize[1], range: NSMakeRange(12, 3)) payloadsize[0] = 0 sizeOfJPEG_1 = (payloadsize[1] << 16) + (payloadsize[2] << 8) + payloadsize[3]//here is the problem //UInt32(sizeOfJPEG_1 = (payloadsize[1] << 16) + (payloadsize[2] << 8) + payloadsize[3]) //the way I am currently dealing with converting my shifting and additions to the correct sizeOfJPEG_1 UInt32 argument type //..more code }
:客観CIで働く私のコードの一部は、トラブルスウィフトへの変換を持っていますそれだったら客観Cタイプはuint8_tだった、私はUINT8 < < 16をシフトしますランタイムエラーですUInt32型 さらに重要な
- は、おそらく、最初に把握するために、引数にbitshiftingや追加、私は知りません法的な操作N uint8_tのtyupe対物CにおいてとちょうどIがUINT8 < < 16ならびにUINT8 < < 8を左シフトしていたので、私は、オーバーフローエラーを取得していUINT8
の種類とスイフトではありません。 致命的なエラー:シフト量IがI対物Cが静かuint8_t < < 16 withoをシフトさ理解すると思うビット
タイプのサイズよりも大きいですuint8_t < < 16の結果はどのように計算するのか分からないが、それは0ではないだろうか? (uint8_tは、unsigned char型として定義される)
これは基本的なスウィフト機能です。スウィフトの本をダウンロードして読んでください。あなたの変数が0でない限り、16ビット位置のシフトはオーバーフローします。 – gnasher729
@ gnasher729:そうではありません。 Swiftの書籍には次のように書かれています。「整数の記憶域の境界を越えて移動するビットは破棄されます」唯一の制限は、シフト量が対応するデータ型のビット数よりも小さくなければならないことです。 –