我有一个矢量<布尔>我需要逐位写入二进制文件的二进制数据(我知道它必须是字节的8的倍数,只是假设它是)。然后,我需要将该数据重新读回矢量<布尔取代。我很难让这个工作起来。
数据必须在向量中开始和结束<布尔取代。如果有人可以就简单的语法提出建议来实现这一点,那将是一个巨大的帮助。
答案 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