作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我使用以下查询来获取硬盘序列号。
ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
它为管理员用户和非管理员用户返回不同的序列号,如下所示:
管理员 - WD-WCAYUS426947非管理员 - 2020202057202d44435759415355323439363734
当尝试将非管理员序列号转换为十六进制到字符转换器时,它给出了 W -DCWYASU249674,这实际上是每 2 个字符进行一次字符交换。
有什么想法可以在不修改非十六进制格式的情况下获取正确的序列号吗?
最佳答案
如评论中所述:这似乎是 Windows 中 Unresolved 错误,尽管 Microsoft knows about it .
解决它的方法是转换十六进制字符串并交换数字,我写了一个方法来为您完成此操作,您可以根据需要随意编辑它:
public static string ConvertAndSwapHex(string hex)
{
hex = hex.Replace("-", "");
byte[] raw = new byte[hex.Length / 2];
for (int i = 0; i < raw.Length; i++)
{
int j = i;
if (j != 0)
{
j = (j % 2 == 1 ? j-1 : j+1);
}
raw[j] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
}
return System.Text.Encoding.UTF8.GetString(raw).Trim(' ', '\t', '\0');
}
关于c# - Win32_PhysicalMedia 为非管理员用户返回不同的序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23914933/
我是一名优秀的程序员,十分优秀!