c++ - 位模式匹配和替换

标签 c++ c bit-manipulation

我遇到了一个非常棘手的位操作问题。

据我所知,保存一个值的最小变量大小是一个 8 位字节。 C/C++ 中可用的位操作适用于整个字节单元。

想象一下,我有一张 map 可以用信号 10000(5 位)替换二进制模式 100100(6 位)。如果来自文件的输入数据的第一个字节是 10010001(8 位)并存储在 char 变量中,则它的一部分与 6 位模式匹配,因此被 5 位信号替换以给出 1000001(7 位)的结果.

我可以使用掩码来操纵一个字节中的位,以获得最左边的位到 10000(5 位)的结果,但最右边的 3 位变得非常难以操纵。我无法移动原始数据最右边的 3 位以获得正确的结果 1000001(7 位),后跟该 char 变量中的 1 个填充位,该变量应由输入的下一个后续字节的第 1 位填充。

我想知道 C/C++ 是否真的可以对不适合 Char(1 字节)变量甚至 Int(4 字节)的长度位模式进行这种替换。 C/C++ 可以做到这一点,还是我们必须使用其他处理单位操作的汇编语言?

我听说 Power Basic 可以比 C/C++ 更好地进行逐位操作。

最佳答案

如果时间和空间不重要,那么您可以将位转换为字符串表示并对字符串执行替换,然后在需要时转换回来。 不是一种优雅的解决方案,而是一种有效的解决方案。

关于c++ - 位模式匹配和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3429488/

相关文章:

c++ - 从 std::string 转换为 uint8

c - 将指针传递给函数 - 取消引用还是直接发送?

kotlin - Kotlin 中 UInt 中位标志的 EnumSet

c++ - 接受任何大小的 char 的 std::array 作为非类型模板参数

c++ - snd_pcm_hw_params_set_period_size_near 没有返回好的值

C:两个数组相除

c - 如何从字符串中的一组字符中去除前导字符?

c++ - 如何在不使用 C/C++ 循环的情况下切换位 n 次?

c++ - 整数位表示的哪一部分是标准的一部分?

c++ - 如何使用 pthreads 以正确的方式设置两个线程之一的优先级