检查struct

时间:2017-07-18 20:49:05

标签: c++ struct arduino

我正在开发一个库(供我自己使用),它可以通过i2c无缝地同步多个控制器上的结构。我得到了大部分工作,但我想检查是否对结构进行了更改,以便在发生这种情况时我可以开始同步。

为了能够通过串行(i2c)发送数据,我将其转换为char数组。

struct MyStruct {
  int a = 123;
  long b = 4567890;
  String c = "abc";
};

MyStruct myData;
char bufferP[sizeof(myData)];
memcpy(bufferP, &myData, sizeof(myData));

另一方面我做了

memcpy(&myData, bufferP, sizeof(bufferP));

使其回到结构。效果很好!!

我试图遍历bufferP以检查更改,因此我知道何时同步,但只有在值中的字符数存在差异时才会更改。

FX。如果结构是这样的

struct MyStruct {
  int a = 123;
  long b = 4567890;
  String c = "abc";
};

它会输出像这样的东西

0 -> 123
1 -> 0
2 -> 82
3 -> 179
4 -> 69
5 -> 0
6 -> 143
7 -> 2
8 -> 3
9 -> 0
10 -> 3
11 -> 0

如果结构像这样

struct MyStruct {
  int a = 123;
  long b = 4567890;
  String c = "def";
};

它会输出完全相同的东西。

有人能告诉我为什么bufferP没有变化? 当我把它放回到结构体时,变化就像它们应该的那样。

当我不知道结构的结构时,我如何检查结构是否已经改变?

1 个答案:

答案 0 :(得分:0)

您有两种选择:

  1. 单独序列化字符串。这意味着:序列化结构而不用字符串,然后序列化字符串的长度,然后序列化字符串的内容。

  2. char[50]替换字符串。 (或任何尺寸适合你。)