我使用了一些寄存器,以及将所有内容都转换为位索引的数据表。幸运的是,我正在使用 gcc,它具有二进制文字扩展语法,因此我可以执行以下操作
register |= 0b01000010;
另一种选择当然是只使用十六进制格式
register |= 0x42;
尽管随着时间的推移使用了十六进制,但我仍然发现二进制格式更适合这种位碰撞。我仍然将 4 和 2 半字节分解为它们的 0100 和 0010 模式。所以我认为二进制格式的可视化效果更好。二进制格式的问题在于,很难找到边界。使用十六进制格式,半字节可以很好地分开,因此您有时可以更安全地“索引”位。IOW,在顶部,我不得不担心我没有添加或省略额外的 0 并最终以 7 位而不是 6 位结束。
我很好奇其他人是否已经开发出一种技术/技巧来吃蛋糕并吃掉它。当您必须在 C 中对相邻的常量进行字符串处理时
"Hello " "World"
编译器足够聪明,可以将它们混合成一个文字。如果有办法对这些二进制数做类似的事情,那就太好了,例如
0b0100 0010
我可以用宏做一些奇怪的事情,也许
#define _(a, b) (((a) << 4) | (b))
然后能够做到
_(0b0100,0b0010)
但老实说,情况更糟,而且仅限于一小口。好奇是否有人想出了一些聪明又漂亮的东西。