我从文件中读取大量整数。它们全部为0或1,因此我已将每个读取的整数转换为 bool(boolean) 值。
我需要做的是通过将每8位/ bool(boolean) 值打包到一个字符中来利用字符提供的空间(8位)。我怎样才能做到这一点?
我已经尝试过二进制操作,但是我没有想出我想要的东西。
int count = 7;
unsigned char compressedValue = 0x00;
while(/*Not end of file*/)
{
...
compressedValue |= booleanValue << count;
count--;
if (count == 0)
{
count = 7;
//write char to stream
compressedValue &= 0;
}
}
更新
我已经更新了代码以反射(reflect)到目前为止建议的一些更正。我的下一个问题是,我应该如何初始化/清除未签名的字符?
更新
反射(reflect)了更改以清除字符位。
谢谢大家的帮助。
最佳答案
几点注意事项:
while(!in.eof())
是错误的,您必须首先尝试(!)读取某些内容,如果成功,则可以使用数据。 uint8_t(1) << count
。 关于c++ - C++将八个 boolean 值压缩为一个字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14509679/