我正在研究一個庫(供我自己使用),它可以通過i2c跨多個控制器無縫地同步一個結構。我大部分工作得很好,但我想檢查一下結構是否發生了變化,以便在發生這種情況時可以開始同步。檢查struct
爲了能夠通過串行(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沒有變化嗎? 當我把它放回到結構中時,變化就像它們應該是蜜蜂一樣。
當我不知道結構的結構時,我該如何檢查結構是否發生了變化?
什麼類型是String? – Galik
不是'String c'的一個指針,就像'String c =「abc」;'?代碼如何傳輸該字符串的數據?這是一個字符串文字,所以比較(本地)指針可能會起作用,但假設它指向動態內存,其內容可能會更改? –
我猜'String'不是純數據,它包含指針。指針不會使用您使用的技術進行序列化。 – Galik