我想知道如何在C++中将空间写入文件(可能使用iostream)。是否将bitset分解为大小为8的bitset,然后将每个bitset写入该文件可节省空间?你对此有何想法?这是数据压缩的意图。节省空间写入位于C++中的文件
0
A
回答
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
如果您改为使用boost::dynamic_bitset
,则可以指定底层块的类型并使用to_block_range
和from_block_range
函数检索它们。
http://www.boost.org/doc/libs/1_46_0/libs/dynamic_bitset/dynamic_bitset.html#to_block_range
(例如,使用unsigned char
为块类型,并将它们存储在二进制模式流)
相关问题
- 1. 节省空间的视图
- 2. 节省空间的线索
- 3. innodb节省存储空间
- 4. 从git仓库中删除工作文件,以节省空间
- 5. 可以定位独立的代码节省内存空间?
- 6. 的JavaScript - 写入新文件delets空间
- 7. 使用StringBuilder处理csv文件以节省堆空间
- 8. 写入位于EC2上的文件
- 9. 适用于QR码的节省空间的替代方案?
- 10. 在写入操作节点js期间文件变空白
- 11. XML文件错误节省C#
- 12. 写入ByteArray AS字节文件在C#
- 13. 下载Android源码时节省空间
- 14. java.lang.OutOfMemoryError:Java堆空间 - 如何节省内存?
- 15. Pyinstaller:编译时节省空间
- 16. Trie节省空间,但是如何?
- 17. 结合动画帧来节省空间
- 18. 写入文件在C++的空间作为新行
- 19. 用TCPDF将空间写入PDF文件
- 20. 从内核空间写入文件
- 21. 如何空间写入文件
- 22. GDI将位图写入C文件中的文件#
- 23. 将空行写入文件C
- 24. 写入空白与C++文件
- 25. 将字节数组写入C#.NET中现有文件的中间
- 26. 如何在android/java中的文件中间写入字节
- 27. 将字节写入文件中的特定位置vb
- 28. 节省时间MongoDB中
- 29. 依赖注入可以节省内存空间吗?
- 30. 空节点的缺省值
我只是不知道写的行为,如果我写一个bitset的让说尺寸600. – DogDog 2011-03-02 20:51:08
@Apoc:我不明白你害怕什么。你可以发布一些代码吗? – 2011-03-02 20:52:39
@Apoc:如果您的位集非常大并且可以使用,您可能需要使用'boost :: dynamic_bitset'(http://www.boost.org/doc/libs/release/libs/dynamic_bitset/dynamic_bitset.html)有可变的大小。 – 2011-03-02 20:57:32