【问题标题】:Easy Bit-Level Serialiation简单的位级序列化
【发布时间】:2012-04-13 11:05:41
【问题描述】:

我正在寻找一个 C++ API 来方便高效将任意位大小的(用户定义的)类型序列化/反序列化为某种结构(最好是模板类) ) 包含一组位。我相信boost::dynamic_bitset 是一个好的开始,但它不包含用于附加诸如uint8_tuint16_t 等内置类型的函数/运算符。

我希望它像下面的例子一样工作

boost::dynamic_bitset bs;
bs.append((uint8_t)123);
bs.append((uint16_t)12345, big_endian);

流操作符也应该支持与状态相关的字节序行为:

bs << (uint8_t)(123);
bs << little_endian;
bs << (uint16_t)(12345); // serialized as little_endian
bs << big_endian;

我也知道 Boost.Serialization 和 Boost.Endian(在 Boost Sandbox 中)。我想要类似的东西扩展到位级别。

我相信boost::dynamic_bitset的成员函数

void append(Block block);

template <typename BlockInputIterator>
void append(BlockInputIterator first, BlockInputIterator last);

对于大多数用户来说级别太低。我想它应该在这些新的append 函数中重用。为了优化更多的表达式模板,可以使用将连续序列化分组为更大(字节大小)的块,然后将它们附加到dynamic_bitset

【问题讨论】:

    标签: c++ boost binary-serialization


    【解决方案1】:

    我不知道有任何库,但自己编写一个 BitBufferReader/Writer 并不难,它完全符合您的要求。

    【讨论】:

    • BitBufferReader/Writer 是您实例化 boost::dynamic_bitset 的某个类吗?
    • 我会使用带有字节偏移和位偏移的普通容器(向量/数组),但您可以使用您认为最合适的容器。
    猜你喜欢
    • 2014-09-23
    • 2011-12-25
    • 1970-01-01
    • 2019-10-29
    • 1970-01-01
    • 2015-05-18
    • 2010-12-27
    • 1970-01-01
    • 2020-07-10
    相关资源
    最近更新 更多