草庐IT

Serialization

全部标签

c++ - 捕获 boost 序列化存档异常

我有以下情况。这是一个代码片段,经过编辑以演示问题。ifstreamifs("empty_file");if(!ifs.is_open()){ui.display("Error:Unabletoopenfile\"empty_file\"\n");return;}archive::text_iarchiveia(ifs);try{ia>>some_class;}catch(...){ui.display("Thisshouldcatcheversingleexception\n");}empty_file确实是一个完全空的文件。这应该会导致错误;确实如此。问题是我无法捕获boost抛出

c++ - 如何增量编码 C/C++ 结构以通过套接字传输

我需要以相当高的更新速率通过线路发送C结构(使用UDP套接字,有时可能使用XDR),这可能会导致几khz的大量冗余和不必要的流量。这是因为,结构中的某些数据有时可能没有更改,所以我认为针对先前的C结构对当前C结构进行增量编码似乎是个好主意,非常像“diff”".但我想知道,执行此类操作的最佳方法是什么,最好是以可移植的方式同时确保维护数据完整性?是否可以简单地对数据进行异或并像这样继续?同样,该方法保持足够的可扩展性也很重要,以便可以将新字段添加到结构中或在必要时重新排序(填充),这听起来好像也需要版本控制信息。任何想法或指示(是否有现有的图书馆?)将不胜感激!谢谢编辑:感谢所有提供答

c++ - Qt - 序列化 "double"时出现问题

我序列化“double”数据类型并得到一个错误QDataStream&operator运算符已定义。这是错误消息:error:conversionfrom'double'to'constQChar'isambiguous您遇到过这种情况,或者理解为什么会变成这样吗? 最佳答案 听起来它看不到double的运算符,因此它试图从double隐式创建一个QChar以发送到流,但是QChar有可能匹配的多个构造函数。确保您的header包含的内容都是正确的。你能告诉我们你试图序列化替身的代码吗?

c++ - 使用单独的 .h 和 .cpp 文件 boost 序列化

我正在试验boost序列化库,并且大部分都可以正常工作。唯一的问题是当我尝试序列化具有单独的.h和.cpp文件的对象时。当我使用这个命令编译时:g++boostSerialize.cppClass.cpp-lboost_serialization我收到这个错误:/tmp/cc8kbW6J.o:Infunction`voidboost::serialization::access::serialize(boost::archive::text_oarchive&,Class&,unsignedint)':boostSerialize.cpp:(.text._ZN5boost13seria

python - 序列化 C++ 对象以通过套接字发送到 Python - 最佳方法?

我需要在两个不同的框架之间创建网络通信,一个用C++编写,另一个用Python编写。为了交换数据​​,我想在C++中创建某种灵活的结构(基本上是一个结构),它被序列化,通过套接字发送到Python,然后反序列化.最常用的方法是什么?我确信Boost可以在任何一方做到这一点,因为有boostpython,但我不想把项目要求搞得那么大。那么除了指定自己的二进制数据格式之外,是否有更小的库或任何其他优雅的解决方案?更新:下面是一个示例,如何使用Google的protobuf通过将数据结构从C++脚本发送到Python脚本>UDP。这在MacOSXMavericks上进行了测试,但在其他Uni

c# - 使用由 google 的 protobuf 序列化的 protobuf-net 反序列化数据时出现问题

我目前正在处理在一个应用程序(C++)中序列化并需要在另一个应用程序(C#)中反序列化的代码。我正在尝试使用googleproto+protobuf-net但出现问题。.cc和.cs消息定义文件都是使用各自的编译器从同一个.proto文件生成的。数据通过UDP发送,消息(~40B)很容易放入单个数据报中。在C++大小上,使用boost::asio传输数据,相关代码为:ProtocolBufferdatadata;...boost::asio::streambufb;std::ostreamos(&b);data.SerializeToOstream(&os);m_Socket.send

c++ - 如何序列化 boost::dynamic_bitset?

如何使用boost::dynamic_bitset成员序列化一个类?#include#include#include#include#includeclassA{friendclassboost::serialization::access;boost::dynamic_bitsetx;templatevoidserialize(Archive&ar,constunsignedint){ar&x;}};intmain(){Aa;std::stringstreamss;boost::archive::text_oarchiveoa(ss);oa编译报错(boost1.57)Infilei

c++ - Boost C++ 序列化一个 char *

我有一个类,我正在尝试序列化一个shared_ptr,但序列化对象的常规方法不起作用:classObject{public:Object();~Object();shared_ptrobjectone;friendclassboost::serialization::access;templatevoidserialize(Archive&ar,constunsignedintversion){ar&objectone;}};我什至尝试过这种方式,但它仍然不起作用:voidserialize(Archive&ar,constunsignedintversion){for(inti=0;

c++ - boost 原始 C 数组的序列化、反序列化

我正在尝试使用下面的示例序列化和反序列化原始C指针及其数据。它似乎序列化得很好,但我不确定如何使其反序列化——当我反序列化它时,它只是因内存访问冲突异常而崩溃。我想这是因为它不知道如何反序列化它,但我应该在哪里指定呢?使用vector不是一种选择,在非常大的原始数据量中它非常慢#include#include#include#include#pragmawarning(push)#pragmawarning(disable:4244)#include#include#include#include#include#include#pragmawarning(pop)structMonk

c++ - 在 C 中将结构序列化/反序列化为 char*

我有一个结构structPacket{intsenderId;intsequenceNumber;chardata[MaxDataSize];char*Serialize(){char*message=newchar[MaxMailSize];message[0]=senderId;message[1]=sequenceNumber;for(unsignedi=0;i我需要将其转换为char*,最大长度MaxMailSize>MaxDataSize以便通过网络发送,然后在另一端反序列化它我不能使用tpl或任何其他库。有什么方法可以使它变得更好吗?我对此不太满意,或者这是我们能做的最好的