我需要在客户端和服务器之间传输数据。当我将服务器从Windows(msvc140)移动到Debian(gcc 64位)时,我的基于boost
的字节流类出现了问题。他们的档案不同。
#include <string>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/iostreams/device/back_inserter.hpp>
#include <boost/iostreams/stream.hpp>
int main()
{
std::string s;
typedef boost::iostreams::back_insert_device<std::string> BackInsertDevice;
typedef boost::iostreams::stream<BackInsertDevice> Stream;
typedef boost::archive::binary_oarchive BinaryOArchive;
Stream stream(s);
BinaryOArchive ar(stream);
ar << "qwer" << 10;
stream.flush();
int sz = s.size();
// Windows (msvc140): 49
// Debian (gcc 64-bit): 57
}
boost
的两个版本均为1.61.0
答案 0 :(得分:2)
记录在案。 http://www.boost.org/doc/libs/1_49_0/libs/serialization/doc/todo.html#portablebinaryarchives
Boost本身没有便携式存档。
您想查看EOS Portable Archives:https://epa.codeplex.com/
他们很容易放弃您的代码库并使用而不是boost::archive::binary_[io]archive