【发布时间】:2018-04-13 09:35:02
【问题描述】:
有一些很棒的库可用于反序列化二进制格式。我真的很喜欢 kaitai 和 nom's approach 使用 Rust 的声明式方法。
但是,我不知道有什么好的方法可以序列化二进制格式。
例如,您经常遇到必须将消息长度直接写入消息头的情况,但实际上此时您并不知道确切的消息长度,因为它取决于消息头下游的许多字段.而且您有时还必须处理可能很麻烦的填充对齐。
您知道此类问题的任何解决方案吗?
【问题讨论】:
有一些很棒的库可用于反序列化二进制格式。我真的很喜欢 kaitai 和 nom's approach 使用 Rust 的声明式方法。
但是,我不知道有什么好的方法可以序列化二进制格式。
例如,您经常遇到必须将消息长度直接写入消息头的情况,但实际上此时您并不知道确切的消息长度,因为它取决于消息头下游的许多字段.而且您有时还必须处理可能很麻烦的填充对齐。
您知道此类问题的任何解决方案吗?
【问题讨论】:
请看ASN.1,它在多年前就解决了这个问题,并且仍在许多不同行业的关键基础设施中继续广泛使用。它独立于编程语言和机器架构,因此您可以设置通信,无论一个对等方在小端机器上使用 C,而另一个在大端机器上使用 Java 或 C#。用于 ASN.1 的优质工具可以轻松处理结构填充问题。 ITU-T ASN.1 项目的ASN.1 Tools 页面提供了一个很好的工具列表(免费和商业)。
【讨论】: