我正在用C ++实现一个熵编码模块。
代码产生的0和1的流,我想输出到文件中。
由于只能写入整个字节(?),因此需要一些缓存。我在想这样的事情:
struct out_cache_t {
uint8_t cache = 0;
uint8_t count = 0;
};
inline void cached_output(const int bit, out_cache_t &out_cache, std::ofstream &out) {
out_cache.cache <<= 1;
out_cache.cache |= bit;
out_cache.count += 1;
if (out_cache.count == 8) {
out.write((char*)&out_cache.cache, 1);
out_cache.count = 0;
}
}
void encode(...) {
out_cache_t out_cache;
std::ofstream out("output.txt");
// ... do encoding ...
if ( ... need to write 1 ... ) {
cached_output(1, out_cache, out);
} else if ( ... need to write 0 ... ) {
cached_output(0, out_cache, out);
}
// ... more stuff ...
}
但是我想知道,是否在标准库中内置了一些更简单或可能更有效的方法?人们在这种情况下通常会做什么?
(请注意,我通常使用Python进行编程,因此我对C ++的方法不太熟悉)