您好,登錄后才能下訂單哦!
在C++中,有許多輕量級的序列化庫可以幫助你處理數據的序列化和反序列化
示例:
#include <cereal/archives/binary.hpp>
#include <fstream>
struct MyData {
int x;
float y;
template<class Archive>
void serialize(Archive &archive) {
archive(x, y);
}
};
int main() {
// 序列化
std::ofstream os("data.bin", std::ios::binary);
cereal::BinaryOutputArchive archive_out(os);
MyData data_out{42, 3.14f};
archive_out(data_out);
// 反序列化
std::ifstream is("data.bin", std::ios::binary);
cereal::BinaryInputArchive archive_in(is);
MyData data_in;
archive_in(data_in);
}
示例:
// schema.fbs
table MyData {
x: int;
y: float;
}
// 編譯 schema.fbs 生成 C++ 代碼
// flatc --cpp schema.fbs
#include "schema_generated.h"
#include <iostream>
int main() {
// 序列化
flatbuffers::FlatBufferBuilder builder;
auto data_offset = schema::CreateMyData(builder, 42, 3.14f);
builder.Finish(data_offset);
// 反序列化
auto data_in = schema::GetMyData(builder.GetBufferPointer());
std::cout << "x: " << data_in->x() << ", y: " << data_in->y() << std::endl;
}
示例:
#include <msgpack.hpp>
#include <iostream>
#include <sstream>
struct MyData {
int x;
float y;
MSGPACK_DEFINE(x, y);
};
int main() {
// 序列化
MyData data_out{42, 3.14f};
std::stringstream ss;
msgpack::pack(ss, data_out);
// 反序列化
msgpack::unpacked unpacked;
msgpack::unpack(unpacked, ss.str().data(), ss.str().size());
MyData data_in = unpacked.get().as<MyData>();
std::cout << "x: " << data_in.x << ", y: " << data_in.y << std::endl;
}
這些庫都是輕量級的,易于集成和使用。你可以根據項目需求選擇合適的庫。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。