了解 Ada 如何序列化记录

Isa*_*ses 5 serialization binaryfiles record ada

当我在 Ada 中调用 Write 来序列化记录时,我希望能够预测生成的二进制文件中的内容。你知道我在哪里可以查到这个吗?

我有一些遗留的 Ada 软件,它通过写入记录来生成二进制文件,我需要调试一个应该编写兼容二进制文件的 C++ 程序。所以,我想了解 Ada 在序列化记录时遵循什么规则,以便我可以确保 C++ 代码将生成功能等效的记录。

Sim*_*ght 5

'Write 的序列化输出的格式与表示子句完全无关

默认情况下,编译器将按照记录声明中写入的顺序输出没有对齐填充的记录组件,使用标准未定义的转换方案(因此您可能无法获得编译器之间的互操作性)。GNAT(GCC Ada 编译器)以整数字节输出每个组件。

如果要使用某种不同的格式流式传输类型的值,则可以覆盖 'Write 类型。作为一个不寻常的例子,您可以流式传输到 XML。


Gre*_*ill 3

正如其他人所提到的,如果没有额外的指令,编译器将自行决定记录布局。最好的方法是更改​​原始代码以使用特定布局写入记录。特别是,记录表示子句允许 Ada 程序员准确指定记录的物理布局。事实上,您应该检查原始代码是否具有针对相关类型的其中之一。如果确实如此,那么这将准确回答您的问题。