我想将具有许多结构的结构发送到另一个控制器(与控制器不同,具有不同的架构)。 我需要开发一种序列化来发送数据,而不使用可用的发明序列化方法。 我如何找到添加填充字节的位置,以便在将其发送到另一个控制器之前将其删除? 如何实现元数据,以便其他控制器可以从传输的数据字节重建结构的每个成员? 我们也欢迎任何其他可能需要的点。
答案 0 :(得分:3)
完全便携的序列化/反序列化非常简单。你只需要遍历结构的成员并复制它。您可以使用offsetof
来发现填充,但这主要是无意义的练习,因为这意味着您无论如何都需要对每个结构成员进行一些“手动编码”。
#pragma pack(1)
和类似不太理想。由于某种原因打包了结构,并且没有可移植的方法来禁用填充。它可能适用于一些较小的CPU,如8位或16位,但不适用于完全可移植的代码。
重要的是拥有明确定义的网络协议,说明数据的存储方式,包括endianess 。也就是说,发送方,协议和接收方都有字节序,它们不一定相同。
(传统上,数据协议通常使用大端,因为这是使用XOR门实现硬件CRC校验唯一有意义的事情,但现在大多数情况下都没有问题。有些MCU甚至内置了CRC校验硬件。 )