c++ - 结构到字符串,反之亦然

标签 c++

我想获取从我的结构生成的内存并将其插入字节数组(字符数组)以及相反的方式(将字节数组推回结构)。如果我可以跳过字符串生成步骤并直接将内存写入 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));
}

实际上,您不需要将结构复制到字符数组中。我只是希望把这个想法说清楚。

一定要查看#pragma pack , with 确定结构中的元素如何对齐。任何大于一个字节的对齐都可能会不必要地增加大小。

关于c++ - 结构到字符串,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9969048/

相关文章:

c++ - 存在引用时的赋值运算符和复制构造函数

c++ - 为什么 concurrent_queue 是非阻塞的?

c++ - 如何在 C++ 中拥有三态 'boolean'

c++ - 错误:将 'const std::vector<int>' 作为 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) 的 'this' 参数传递

c++ - 如何使用 Boost.Variant 迭代一系列有界类型

c++ - 在 C++ 中给定迭代器调整 vector 大小

C++ 对长度说明符的支持

c++ - 有条件地测试 vector 元素的相等性

c++ - 使用 zlib 的 gzip 文件访问功能的未压缩文件大小

c++ - fatal error : Eigen/Dense: No such file or directory