gpt4 book ai didi

c++ - 使用 Boost 和 uint8_t 的二进制序列化

转载 作者:太空狗 更新时间:2023-10-29 20:59:21 24 4
gpt4 key购买 nike

在处理二进制数据时,我倾向于使用 uint8_t。我想这对我来说就像一个字节的类型。但是,我无法弄清楚如何使 boost 中的二进制序列化与该类型一起使用。我是在问不可能的事情还是只是遗漏了一些简单的事情?

此示例程序无法在 VS2013 上编译,并提示未将流转换为 std::ostreamstd::istream

该程序使用 char 而不是 uint8_t 可以正常工作,但这让我很烦恼。 :)

#include <cstdlib> // EXIT_SUCCESS
#include <vector>

#include "boost/archive/binary_iarchive.hpp"
#include "boost/archive/binary_oarchive.hpp"
#include "boost/iostreams/device/array.hpp"
#include "boost/iostreams/device/back_inserter.hpp"
#include "boost/iostreams/stream_buffer.hpp"

int main(int argc, char** argv)
{
typedef std::vector< uint8_t > Buffer;
Buffer buffer;

// Serialization
{
int foo = 1;

typedef boost::iostreams::back_insert_device< Buffer > Device;
Device device(buffer);

typedef boost::iostreams::stream_buffer< Device > Stream;
Stream stream(device);

{
boost::archive::binary_oarchive archive(stream);
archive << foo;
}
}

// Deserialization
{
int foo;

typedef boost::iostreams::basic_array_source< uint8_t > Device;
Device device(buffer.data(), buffer.size());

typedef boost::iostreams::stream_buffer< Device > Stream;
Stream stream(device);

{
boost::archive::binary_iarchive archive(stream);
archive >> foo;
}
}

return EXIT_SUCCESS;
}

最佳答案

二进制文件采用 std::istream/std::ostream争论,所以你被困在使用std::basic_istream<char>/std::basic_ostream<char> .

顺便说一下,不能保证实现提供 unsigned char/uint8_t流的版本(或者说 std::char_traits<unsigned char> )。

关于c++ - 使用 Boost 和 uint8_t 的二进制序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24948570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com