c++ - SMBIOS 枚举值。文档错误?

标签 c++ windows bit-manipulation

我正在尝试为 Windows 上的 SMBIOS 编写一个简单的解析器。

在阅读 2.6.1 版本的文档(2.6 是我笔记本电脑上的 SMBIOS 版本)时,我遇到了系统信息条目(类型 1 - 第 3.3.2 节)。

在文档中,它表示代表唤醒类型的 BYTE 值是一个枚举(即一个位字段,其中每个位表示是否存在唤醒类型,1 或 0)。

现在,在下面的 3.3.2.2 小节中,Enum 被定义为位偏移 00h 到 08h,使其总共有 9 个位值。一个 BYTE 仅包含 8 位。文档有误还是我遗漏了什么?

我只想从结构中取出 BYTE 并按位进行 AND 以找出具有以下掩码的唤醒类型:

#define SM_SI_OTHER             0x00000001
#define SM_SI_UNKNOWN           0x00000010
#define SM_SI_APM_TIMER         0x00000100
#define SM_SI_MODERN_RING       0x00001000
#define SM_SI_LAN_REMOTE        0x00010000
#define SM_SI_POWER_SWITCH      0x00100000
#define SM_SI_PCI_PME           0x01000000
#define SM_SI_AC_POWER_RESTORED 0x10000000

这里我遗漏了保留值。我应该怎么做?

这是我使用的文档的链接:http://www.dmtf.org/sites/default/files/standards/documents/DSP0134_2.6.1.pdf

提前感谢您的回答。

最佳答案

我查看了文档,它说该字段是一个枚举,而不是位掩码。

关于c++ - SMBIOS 枚举值。文档错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16480866/

相关文章:

平台之间的 C++ 正则表达式差异

c++ - 尽可能按引用传递,否则按值传递

windows - 在 Windows 上以事务方式写入文件更改

c++ - 如何访问一片 packed_bits<> 作为 std::bitset<>?

java - 替换 long 的最后一位数字的最高效(也最安全)的方法是什么?

C++0x、编译器钩子(Hook)和硬编码语言特性

c++ - 按位运算的意外结果为什么 (1 | 1 & 2) 给出 1 而不是 2?

c - 在 C 中与 char 类型进行位交换

Python:搬到新电脑

c++ - Windows 错误消息