2017-01-04 22 views
1

メモリ内のある場所へのポインタが渡されました。void *dataLocです。void *からfloatへの変換

プログラムによっては、unsigned charの束としてメモリが転送されています。ここで、0x00は0であり、0xFFは1です。

私は、例えば4番目のすべての文字を引っ張って、表現するはずの数字のfloatに変換したいと考えています。しかし、私はvoid *からchar[]の配列にfloat[]という配列にどのようになっているのか理解できないままになっています。

私の最初に考えたのは

for(i=0,i<100,i++){ 
    floatArray[i] = (float)(*((unsigned char *)dataLoc[4*i]))/255; 
} 
  1. void *char *にキャストされたような何かをすることでした。

  2. 次の4番目の文字は、

  3. float

    floatcharを変更する必要があり、

  4. *は私unsigned charを与える必要がありチャーポインタを間接参照forループから選択されるが、 a float数字の表現* 255

  5. 私は必要な分数を得るために255で割ります。

これは私がタイプの「ポインタ 『のボイド』 『をのボイド』 算術演算で使用されるエラーを取得するためのポインタとオブジェクトタイプではなく、これを超えて、私は本当に自信がないんだけど、失敗しましたその行の残りの部分は、私が希望の道をうまくいくこと。

誰かがこれを処理する適切な方法?あなたは警告が有効になっていたことが良い

答えて

0

を助言することができます。

dataLoc[4*i]は、(unsigned char *)dataLocの前に発生し、 "pointer of type 'void *' used in arithmetic ..."

"unsigned char *に最初にキャストします。

*の余分なレベルも削除してください。以下は、固定unsigned char

((unsigned char *)dataLoc)[4*i] 

タイプです:

void * dataLoc; 
    float floatArray[100]; 

    // for(i=0,i<100,i++){ Use ';', not ',' 
    for(int i=0;i<100;i++){ 
     // Cast to `unsigned char *` before using `[]` 
     // * not needed here ---v 
     floatArray[i] = (float)(( ((unsigned char *)dataLoc) [4*i]))/255; 
    } 

または

for (int i=0; i<100 ;i++) { 
    unsigned char value = ((unsigned char *)dataLoc)[4*i]; 
    floatArray[i] = value/255.0f; 
    } 
+0

をそれに追加するには、エラーは、無効pointers.Inにポインタ演算を行うことができないということについてでしたあなたのケースは、コンパイラがdataLoc [4 * i]の意味を知らないことを意味します。 さらに明確にするためにいくつかの行を使用してみましょう。行は安く、開発者の時間は高価です:) – foolo

+0

@foolo OK、別のコーディングが追加されました。 – chux

関連する問題