我正在开发一个库(供我自己使用),它可以通过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没有变化? 当我把它放回到结构体时,变化就像它们应该的那样。
当我不知道结构的结构时,我如何检查结构是否已经改变?
答案 0 :(得分:0)
您有两种选择:
单独序列化字符串。这意味着:序列化结构而不用字符串,然后序列化字符串的长度,然后序列化字符串的内容。
用char[50]
替换字符串。 (或任何尺寸适合你。)