我想从我的struct中生成内存并将其推送到字节数组(char数组)以及相反的方式(将字节数组推回到结构中)。如果我可以跳过字符串生成步骤直接将内存写入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;
}
我写的这个例子不应该编译,它是为了在独立于平台的环境中解释我的想法。
请注意:memof
和setmemof
不存在。这是我要问的问题。另一个答案是使用char数组作为中间步骤。
答案 0 :(得分: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,确定结构中元素的对齐方式。任何大于一个字节的对齐都可能会不必要地增加大小。