从文件中收集位数据

时间:2011-02-02 14:30:15

标签: c++ binary bit

我有一个矢量<布尔>我需要逐位写入二进制文件的二进制数据(我知道它必须是字节的8的倍数,只是假设它是)。然后,我需要将该数据重新读回矢量<布尔取代。我很难让这个工作起来。

数据必须在向量中开始和结束<布尔取代。如果有人可以就简单的语法提出建议来实现这一点,那将是一个巨大的帮助。

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用std::bitset。它有一个构造函数和一个to_ulong成员,您可以使用它来进行转换。然后你只需要将大小为8的向量转换为bitset,反之亦然。请注意位存储在向量中的顺序以及字节顺序(如果它适用于您的文件...)

我今天过得很愉快,这里有一些“伪”代码:

// you will guess declarations
// you might have to reverse bit order dependaing of how you store bits

for(int i = 0; i < 8; ++i)
{
    if(myvector[i]) mybistset.set(i);
}

char toWriteInFile = bitset.to_ulong();

// write in file

[...]

char readFromFile;

// read from file

std::bitset mybitset(readFromFile);

// same remarks

for(int i = 0; i < 8; ++i)
{
    myvector[i] = mybistset[i];
}

当然,你必须管理矢量大小大于8的部分;)

MY2C