以下代码对我不起作用,我不知道为什么。 (我已经阅读了“可能已经有你答案的问题”中的2场比赛,但没有帮助。)
我需要检索Windows为注册表中的C:驱动器创建的唯一编号。值是REG_BINARY,我需要它在字符串中。当我说代码不起作用时,我的意思是当键值为:时,它总是只返回2个奇怪的字符: 19 49 84 25 00 00 50 06 00 00 00 00我希望将原始键值作为字符串
byte[] machineID = (byte[])Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\SYSTEM\\MountedDevices", "\\DosDevices\\C:", null);
if (machineID != null)
{
var str = System.Text.Encoding.Default.GetString(machineID);
MessageBox.Show(str);
}
注意:我知道如果重新格式化驱动器或重新安装操作系统,此值可能会更改,但只要它与此特定计算机绑定,这对我来说没问题。
答案 0 :(得分:2)
您正在尝试将不是字符串的内容解释为字符串。
它总是只返回2个奇怪的字符
您从前4个字节中获取两个unicode字符,然后00 00
个字节充当字符串终止符。
如果您想要"19-49-84-25-00-00-50-06-00-00-00-00"
之类的输出,那么您可以改为:
var str = BitConverter.ToString(machineID);
有关详细信息和选项,请参阅此问题“byte[] to hex string”。