如何以最轻的大小在文件中存储大型布尔值数组



我的程序生成充满布尔值的大数组。我需要最紧凑的方式来保存这些文件。

我在这里读到http://www.kirupa.com/forum/showthread.php?339670-How-is-boolean-represented-in-memory内存中的8个布尔值可以表示为单个字节,所以单个布尔值是单个比特。但是如何将这些布尔值数组保存到文件中呢?我知道-文件写入函数是用字节来操作的,而不是位。

简短-我希望能够将布尔值数组保存到文件中,大小比Array小8倍。长度

我猜你是用c++编码的,因为你发布的链接指向一个c++论坛?

您可以使用位掩码和位操作,其中每个布尔值位于字节的特定位。因此,你可以使用一个字节(uint8)来存储8个布尔值。这是相当低级的,当我用C编程时,当存储是一个大问题时,我曾经这样做过。

如果你真的想这么做,你最好把下面的操作隐藏在一些更高级别的读/写和设置/重置函数中。在将布尔值转换为字节之后(现在您有了一个字节数组!),您可以简单地将它们写入二进制文件,如下所述。

这里有一些关于如何将布尔值转换为字节的提示:您可以为每个感兴趣的布尔值创建掩码,以指定将在字节中的哪个位置写入/读取它们。

为了更好的可读性,我使用了十六进制数。

例如:

uint8 bitFlags = 0x00; // empty mask  0000 0000
uint8 maskA = 0x01;    // first bit:  0000 0001
uint8 maskB = 0x02;    // second bit: 0000 0010

要设置一个变量,使用按位或(保留所有其他位,但设置您感兴趣的位):

bitFlags = bitFlags | maskA;

读取变量:

bool isTrueA = ( bitFlags & maskA ) > 0 ; // bitwise AND, result is 1 if bit is set, 
                                          // 0 otherwise

重置变量:

bitFlags = bitFlags & (!maskA);           // bitwise AND with inverse mask: 1111 1110
                                          // forces position of A to be zero

有关位掩码使用的更多信息可以在这里找到。

相关内容

  • 没有找到相关文章

最新更新