-4

我们有一个 Unix 代码来从 .xml 文件创建直径文件作为输入。当我们转移到 Linux 平台时,我们需要创建相同的实用程序,代码已成功编译,但实用程序没有按预期创建输出文件内容,每个字节的位都颠倒了,我认为这是因为 Linux 是小端。

要写入输出文件的消息块格式为:

ACE_Message_Block* mb = m_pReqMsgBlock;
while (mb) {
                out.write(mb->rd_ptr(), mb->size());
                mb = mb->cont();
           }

任何人都可以建议可以在代码中添加什么额外的内容,以便可以以预期的方式写入字节吗?

4

2 回答 2

5

您必须将大端格式转换为小端格式。对于结构中的 16 位和 32 位值,这必须单独完成。

类似htons和的函数htonl可用于分别转换 16 位和 32 位整数。

一旦数字被转换,就可以通过write函数写入。

于 2016-06-14T12:07:37.387 回答
0

如果您将二进制数据写入文件,则该二进制数据的“正确”字节序是特定于机器的。因此,如果该数据在具有另一种字节序的机器上运行,则该数据会有所不同,这是正确的。您可能会在同一台 Linux 机器上使用另一个程序再次解析此二进制数据,该程序也希望它是 little-endian。

如果您希望输出与字节序无关(例如,因为读取数据的程序在您的大字节序 unix 机器上),则不应输出二进制数据。

于 2016-06-14T12:08:16.300 回答