私はこの配列を持っている:C/Objective-Cで配列のサイズを取得する方法はありますか?
unsigned char* data = CGBitmapContextGetData(cgctx);
はその後、私ははsizeof(データ)とサイズを取得しようとしましたが、それは4データのナンセンス値が情報の大きな量を保持している私を返します。それはちょうど4つではありません;)
私はデータ[8293]でも情報を取得します。
私はこの配列を持っている:C/Objective-Cで配列のサイズを取得する方法はありますか?
unsigned char* data = CGBitmapContextGetData(cgctx);
はその後、私ははsizeof(データ)とサイズを取得しようとしましたが、それは4データのナンセンス値が情報の大きな量を保持している私を返します。それはちょうど4つではありません;)
私はデータ[8293]でも情報を取得します。
sizeof
は、変数がC配列(char data[1024]
)ではなくポインタとして宣言されているため、4を返します。
サイズを取得するには、CGBitmapContextGetHeight
とCGBitmapContextGetWidth
を使用する必要があります。
4の値はナンセンスではなく、要求したポインタのサイズです。ポインタが指す配列のサイズを調べる方法はCではありません。
ポインタとそれが指しているオブジェクトを混同しています。
あなたは、配列ではなくポインタのサイズをとっています。あなたが実際に測定するための配列を持っている場合のアレイにのみ動作するためにはsizeof()の使用;)
は、あなたがこれらの二つの機能以上のものを必要とする
CGBitmapContextGetBitsPerPixel
CGBitmapContextGetHeight
CGBitmapContextGetWidth
または
CGBitmapContextGetBytesPerRow
CGBitmapContextGetHeight
後者が優れています。色空間、配置などによっては、各行の最後に余分な未使用バイトが存在することがあります。私は以前(これは何年も前にLinuxのフレームバッファ直接描画で遊んでいましたが)これに噛まれました。 –
使用してみてください。 Mykolaの答えを参照してください。 –