结构到字符串,反之亦然

Struct to string and vice versa

本文关键字:反之亦然 字符串 结构      更新时间:2023-10-16

我想把从结构中生成的内存推送到字节数组(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;
}

我写的这个例子不应该编译,它是为了在一个独立于平台的环境中解释我的想法。

请注意:memofsetmemof不存在。这就是我的问题所要求的。另一种答案是使用char数组作为中间步骤。

假设您的结构包含对象而不是指针,您可以使用简单的强制转换:

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,它决定了结构中的元素是如何对齐的。任何大于一个字节的对齐都可能不必要地增加大小。