C++ 将八个 boolean 值压缩为一个字符

标签 c++ compression boolean character

我正在从文件中读取大量整数。它们都是 0 或 1,因此我已将每个读取的整数转换为 boolean 值。

我需要做的是通过将每 8 位/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++ 将八个 boolean 值压缩为一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14509679/

相关文章:

c++ - 有没有办法在给定的 int32_t 上重用 std::atomic ?

c++ - 尽管类派生自 QObject,但定义自己的析构函数?

java - 文件压缩到固定大小在Java中

python - 解析和计算 boolean 集定义

.net - 为什么我的 boolean 值 0 返回 true?

c++ - 如何在 Qt Quick 中将 QML 项转换为相应的 C++ 项

c++ - 尝试/捕获丢失的 vector 下标超出范围(调试断言失败)

java - 异或 Java 代码

android - 如何在 Android 上使用 java/kotlin 减小视频大小?

node.js - 从 StackOverflow API 请求 JSON 的编码问题