c++ - 将标志整数转换为人类可读的字符串

标签 c++ winapi flags

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

然而,当涉及到运行程序和调试程序时,将生成的标志值分解回它们的#define 符号会变得很痛苦(这就是我喜欢枚举类型的原因)。

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

最佳答案

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

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

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

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

关于c++ - 将标志整数转换为人类可读的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11092697/

相关文章:

android - Flags有什么用?

c++ - VTK Iso Slider 不工作或不显示 slider 小部件

c++ - 获取当前聚焦窗口的可执行名称?

c++ - 假设我们有一个名为 success 的 C++ 字符串。 &success 和 success& 有什么区别?

lisp - Lisp 中的反转列表

android - 为什么 Intent 总是使用 FLAG_ACTIVITY_FORWARD_RESULT 和 FLAG_ACTIVITY_PREVIOUS_IS_TOP?

c++ - 外部 "C": What does and what doesn't need it?

c++ - 2 智能感知 : argument of type "const char *" is incompatible with parameter of type "LPCWSTR"

用于 win32 或 C++ 的 C#

c++ - 如何更改组合框的背景颜色