2

在 Win32 中有很多地方使用 DWORD 值指定标志值,这些值是通过对 #defined 常量执行按位或来生成的。

但是,在运行程序和调试程序时,将生成的标志值拆回它们的#define 符号可能会变得很痛苦(这就是我喜欢枚举类型的原因)。

如果没有重新实现 Win32 的函数和结构以使用枚举而不是常量,是否有一种简单而轻松的方法可以自动将整数标志值转换回其组件的字符串表示形式?如将192转换为“FLAG_FOO | FLAG_BAR”(其中FLAG_FOO为128,FLAG_BAR为64)。

4

2 回答 2

0

您必须手动对字符串进行编码。

 if (myValue & FLAG_FOO == FLAG_FOO) {
   printf("FLAG_FOO");
 }
 if (myValue & FLAG_BAR == FLAG_BAR) {
   printf("FLAB_BAR");
 }

更重要的是,#define 符号不是由编译器而是由预处理器处理的。这意味着预处理器获取定义列表并将每个符号替换为其定义的值。编译器甚至没有原始符号的信息。

如果不是定义它是变量,并且程序是使用调试信息编译的,那么也许您可以使用调试信息来检索数据。即使在那种情况下,它也可能比一堆ifs 更麻烦。

于 2012-06-19T00:02:57.730 回答
0

这是一个非常有用的网站,我使用 github 和 trinket 拼凑在一起:

https://earonesty.github.io/decompose_hex.html

给定一个输入数字,它会将数字分解为一组十六进制标志。我觉得它很有用(只需要几分钟就可以写出来,但我会一遍又一遍地写)。

给定数字 7 的示例,它将吐出 0x1、0x2、0x4

于 2019-01-28T18:18:30.870 回答