Das liegt nicht am struct selbst. Der Teil geht bei mir in Visual C++. Auf dem Arduino habe ich es nicht ausprobiert.
Ich glaube was schief geht ist das:
packetSize = sizeof(packet);
Das sizeof() wird dir nur den 2-Byte Zeiger zählen. Nicht die Größe des Arrays. Bei mir kommt da in Visual C++ 16 raus. Was daran liegt das Zeiger auf dem PC natürlich 32 Bit haben. Auf dem Arduino sollte es 14 sein.
Dann hast du das Problem dass du da nur eine flache Kopie hast. Du willst wahrscheinlich eine tiefe Kopie. Also musst du Payload extra kopieren! Das steht durch malloc() in einem anderen Speicherbereich und wird durch memcpy() nicht kopiert. Die Kopie des structs passt so. Auch mit 14 Bytes. Aber du kopierst da halt nur den Zeiger. Nicht den Inhalt des Arrays!
Wenn du das in einen Puffer für eine Übertragung willst, musst du das Ziel-Array wahrscheinlich um -2 + 12 anpassen und dann payload in die letzten 12 Bytes kopieren.
Hätte ich eigentlich gleich sehen sollen ![]()