2011-03-02 24 views
0

我想知道如何在C++中将空间写入文件(可能使用iostream)。是否将bitset分解为大小为8的bitset,然后将每个bitset写入该文件可节省空间?你对此有何想法?这是数据压缩的意图。节省空间写入位于C++中的文件

回答

0

如果您通常在bitset中每个位写入一个字节,那么是的,将八个元素存储到一个字节将为您节省7/8个限制空间(您将必须在某处存储位集的大小,当然)。

例如,这写入使用bitset每比特(7/8开销)一个字符:

for (size_t i=0, n=bs.size(); i<n; ++i) 
    stream << bs[i]; 

而此将其存储最佳紧凑(如果我们忽略在末端填充):

for (size_t i=0, n=(bs.size() + 1) % 8; i<n; ++i) { 
    uint8_t byte=0; 
    for (size_t j=0; j<8; ++j) 
     byte = (byte << 1) | bs[i*8 + j]; 
    stream << byte; 
} 

请注意,uint8_t不是标准的C++ 03。它驻留在C99的<stdint.h>或C++ 0x的<cstdint>中。如果你愿意,你也可以使用std::bitset<8>

+0

我只是不知道写的行为,如果我写一个bitset的让说尺寸600. – DogDog 2011-03-02 20:51:08

+0

@Apoc:我不明白你害怕什么。你可以发布一些代码吗? – 2011-03-02 20:52:39

+0

@Apoc:如果您的位集非常大并且可以使用,您可能需要使用'boost :: dynamic_bitset'(http://www.boost.org/doc/libs/release/libs/dynamic_bitset/dynamic_bitset.html)有可变的大小。 – 2011-03-02 20:57:32