2012-04-01 70 views
0

我想從我的結構中產生的內存,並推入到一個字節數組(字符數組),以及其他方式(將字節數組推回到結構)。如果我可以跳過字符串生成步驟並直接將內存寫入EEPROM,那將會更好。 (不要擔心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; 
} 

這個例子我寫的是不應該去編譯,它是爲了解釋一個平臺獨立的環境我的想法。

請注意:memofsetmemof不存在。這就是我所要求的,雖然我的問題。另一個答案是使用char數組作爲中間步驟。

+0

很難理解你在這裏要求什麼,你能澄清你的問題嗎? – 2012-04-01 22:52:51

+0

顯示你的結構。 – 2012-04-01 22:56:33

+0

@ Thir:前三行... – sarnold 2012-04-01 22:56:56

回答

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)); 
} 

其實,你不應該需要從結構複製到一個字符數組。我只是希望明確這個想法。

請務必查看#pragma pack,確定結構中的元素如何對齊。任何大於一個字節的對齊可能會不必要地增加大小。

相關問題