2012-04-01 139 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,确定结构中的元素如何对齐。任何大于一个字节的对齐可能会不必要地增加大小。

相关问题