Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cereal 在Linux上从Windows反序列化二进制文件失败_Cereal - Fatal编程技术网

Cereal 在Linux上从Windows反序列化二进制文件失败

Cereal 在Linux上从Windows反序列化二进制文件失败,cereal,Cereal,我已经为一个谷物系列化问题挣扎了好几个小时 如果my struct在Windows上序列化,在Android上反序列化,则会失败: cereal::Exception: Failed to read 1 bytes from input stream! Read 0" failed 如果二进制文件在Android上序列化,在Windows上反序列化,则该文件可以工作。 也适用于Windows/Windows和Android/Android。 在所有情况下,二进制文件正好是一个字节 我

我已经为一个谷物系列化问题挣扎了好几个小时

如果my struct在Windows上序列化,在Android上反序列化,则会失败:

cereal::Exception: Failed to read 1 bytes from input stream! Read 0" failed
如果二进制文件在Android上序列化,在Windows上反序列化,则该文件可以工作。 也适用于Windows/Windows和Android/Android。 在所有情况下,二进制文件正好是一个字节

我在Windows和Android Linux上运行的代码完全相同,在序列化结构中只有一个bool。(两个版本的谷物版本相同)

这就是我要序列化的内容:

ofstream os_out("data.bin", std::ios_base::binary | ios::binary);
{
    cereal::BinaryOutputArchive archive_out(os_out);
    archive_out(a);
}
os_out << std::flush;
os_out.close();
std::ifstream os_in("data.bin", std::ios_base::binary);
{
    cereal::BinaryInputArchive archive_in(os_in);
    archive_in(a);
}
os_in.close();

无法找出问题所在…

只是尝试使用PortableBinaryOutputArchive,但一切都不起作用。唯一的区别是二进制文件的大小是2字节,而不是1字节。你可能有一些东西在windows和android之间编码为不同的大小?e、 g.bool,可以是1或4个字节,具体取决于编译器。如果看不到正在序列化的类型,很难说。为什么在读取时没有“ios::binary”?“使用ios::binary打开文件可控制新行字符的处理方式。在Windows上,新行字符被扩展为CRLF对。”请参阅刚才尝试使用PortableBinaryOutputArchive,但这一切都不起作用。唯一的区别是二进制文件的大小是2字节,而不是1字节。你可能有一些东西在windows和android之间编码为不同的大小?e、 g.bool,可以是1或4个字节,具体取决于编译器。如果看不到正在序列化的类型,很难说。为什么在读取时没有“ios::binary”?“使用ios::binary打开文件可控制新行字符的处理方式。在Windows上,它们将扩展为CRLF对。”请参阅