如何从注册表中检索REG_BINARY值并转换为字符串

时间:2013-08-09 03:48:01

标签: c# c#-4.0

以下代码对我不起作用,我不知道为什么。 (我已经阅读了“可能已经有你答案的问题”中的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);
  }

注意:我知道如果重新格式化驱动器或重新安装操作系统,此值可能会更改,但只要它与此特定计算机绑定,这对我来说没问题。

1 个答案:

答案 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”。