2012-04-01 19 views
0

私の構造体から生成されたメモリを取得し、それをバイト配列(char配列)にプッシュしたいと思います(バイト配列を構造体に戻す)。ストリング生成ステップをスキップしてEEPROMにメモリを直接書き込むことができればさらに良いでしょう。それは、プラットフォームに依存しない環境の中で自分の考えを説明することを意図した、構造体の文字列とその逆

// These are just example structs (I will be using B) 
typedef struct {int a,b,c;} A; 
typedef struct {A q,w,e;} B; 

#define OFFSET 0 // For now 

void write(B input) 
{ 
    for (int i=0;i<sizeof(B);i++) 
    { 
    eepromWrite(i+OFFSET,memof(input,i)); 
    } 
} 

B read() 
{ 
    B temp; 
    for (int i=0;i<sizeof(B);i++) 
    { 
    setmemof(temp,i,eepromRead(i+OFFSET)); 
    } 
    return temp; 
} 

は私が書いたこの例では、コンパイルすることになっていません(書き込み個々のバイトを&を読み取ることによって、私はそれを扱うことができ、EEPROMビットを心配しないでください)。

ご注意:memofおよびsetmemofは存在しません。これは私の質問にも求めています。代わりの答えは、中間ステップとしてchar配列を使用することです。

+0

あなたがここで求めていることを理解するのは難しいですが、質問を明確にしてください。 –

+0

あなたの構造を表示します。 –

+0

@Thir:最初の3行... – sarnold

答えて

1

あなたの構造は、オブジェクトではなくポインタを含むと仮定すると、あなたは、単純なキャストでこれを行うことができます。

save_b(B b) { 
    unsigned char b_data[sizeof(B)]; 
    memcpy(b_data, (unsigned char *) &b, sizeof(B)); 
    save_bytes(b_data, sizeof(B)); 
} 

実は、あなたはchar型の配列に構造体からコピーする必要はありません。私はアイデアを明確にすることを望んでいました。

#pragma packを必ず確認し、構造内の要素がどのように整列するかを決定します。 1バイトを超える整列は、不必要にサイズを増加させる可能性があります。