无符号字符* my_obj = { 10, 48, 48, 30, 20 ... }
最好使用:
unsigned char my_obj[] = { 10, 48, 48, 30, 20 ... }
所以你会有数组,它知道它的大小,而不仅仅是开始的指针。另外,如果您不打算修改它,请添加 const 。
我的问题是:有没有一些简单的方法可以将字节数组作为流传递?Boost 处理 istreams 和 ostreams 以读取和写入档案。我不想使用字符串流或文件流,而是我想可能是一个自定义流,它只是作为一个巨大的字节数组用于传递给它的任何内容。
检查Boost 的 array_source 和 array_sink。
现场演示:
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/iostreams/device/array.hpp>
#include <boost/iostreams/stream.hpp>
#include <iostream>
#include <ostream>
using namespace boost;
using namespace std;
struct Data
{
double value;
template<class Archive>
void serialize(Archive & ar, const unsigned int)
{
ar & value;
}
};
int main()
{
Data d={3.1415926};
char buffer[256];
{
iostreams::array_sink sink(buffer);
iostreams::stream<iostreams::array_sink> stream(sink);
archive::binary_oarchive out_archive(stream);
out_archive << d;
}
Data restored = {0.0};
{
iostreams::array_source source(buffer);
iostreams::stream<iostreams::array_source> stream(source);
archive::binary_iarchive in_archive(stream);
in_archive >> restored;
}
cout << boolalpha << ( restored.value == d.value ) << endl;
}
输出是:
true