我正在尝试生成随机的ProcessorId,为此,我需要弄清楚其格式。
我计算机上的ProcessorId:
Get-WmiObject-查询“选择名称,来自Win32_Processor的ProcessorId”
<manifest>
<application>
<!-- TODO: Replace with your real AdMob app ID -->
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-################~##########"/>
</application>
</manifest>
来自WMI的ProcessorId属性具有以下描述:
描述处理器功能的处理器信息。为 x86类CPU,字段格式取决于处理器的支持 CPUID指令。如果支持该指令,则该属性 包含2(两个)DWORD格式的值。第一个是的偏移量 08h-0Bh,它是CPUID指令返回的EAX值 输入EAX设置为1。第二个是0Ch-0Fh的偏移量,即 指令返回的EDX值。仅的前两个字节 该属性很重要,并且包含DX的内容 在CPU复位时进行注册-所有其他设置为0(零),并且内容 是DWORD格式。
此值来自处理器的处理器ID成员 SMBIOS信息中的信息结构。
任何人都可以深入解释 Win32_Processor.ProcessorId 的格式吗?
如何从功能 __ cpuid 生成它?
(this answer中的方法不起作用。)
答案 0 :(得分:1)
我仍然不太了解ProcessorId描述。
此代码与Win32_Processor.ProcessorId生成完全相同的字符串。
#include <array>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <string>
std::string GetProcessorId() {
std::array<int, 4> cpuInfo;
__cpuid(cpuInfo.data(), 1);
std::ostringstream buffer;
buffer
<< std::uppercase << std::hex << std::setfill('0')
<< std::setw(8) << cpuInfo.at(3)
<< std::setw(8) << cpuInfo.at(0);
return buffer.str();
}
int main(void) {
std::cout << GetProcessorId() << std::endl;
return 0;
}