如何一次读写 3 位流?
How do I read and write a stream 3 bits at a time?
我正在尝试制作 brainfuck 的超压缩变体,这是一种具有 8 条指令的深奥编程语言。由于 3 位是存储 8 个值的最小存储量,因此我选择了它。我坚持的部分是如何读取不是 2 的幂的多个位。
我尝试使用 std::bitset
,但它只是序列化为每位 1 个字节的字符串,这与我想要的相反。我该怎么做?
一次读取 3 个字节,然后使用 >> 和 & 运算符将它们分成 8 包,每包 3 位。将这些放在一个普通的uint8_t数组中,以简化以后的访问和跳转。
您不是从流中读取位,而是从流中读取字节。
因此,您必须这样做,然后使用按位算法随意调整组件位。
顺便说一下,计算机以字节为单位工作的事实也意味着您的许多程序(任何没有 8 条指令的倍数的程序)必然会浪费 space。
我正在尝试制作 brainfuck 的超压缩变体,这是一种具有 8 条指令的深奥编程语言。由于 3 位是存储 8 个值的最小存储量,因此我选择了它。我坚持的部分是如何读取不是 2 的幂的多个位。
我尝试使用 std::bitset
,但它只是序列化为每位 1 个字节的字符串,这与我想要的相反。我该怎么做?
一次读取 3 个字节,然后使用 >> 和 & 运算符将它们分成 8 包,每包 3 位。将这些放在一个普通的uint8_t数组中,以简化以后的访问和跳转。
您不是从流中读取位,而是从流中读取字节。
因此,您必须这样做,然后使用按位算法随意调整组件位。
顺便说一下,计算机以字节为单位工作的事实也意味着您的许多程序(任何没有 8 条指令的倍数的程序)必然会浪费 space。