我从文件中读取大量整数。它们全部为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())是错误的,您必须首先尝试(!)读取某些内容,如果成功,则可以使用数据。
  • 使用无符号字符可获取至少八位的整数。或者,查看stdint.h并使用uint8_t(或uint_least8_t)。
  • 移位操作方向错误,请改用uint8_t(1) << count
  • 如果您想在内存中做类似的事情,我会使用更大的类型,例如32位或64位,因为即使一次可以读取更多字节,读取字节仍然是单个RAM访问。
  • 写入字节后,不要忘记将临时零清零。
  • 关于c++ - C++将八个 boolean 值压缩为一个字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14509679/

    10-10 18:30
    查看更多