0

下面的代码对我不起作用,我不知道为什么。(我已经阅读了“可能已经有你答案的问题”中的 2 场比赛,但没有帮助。)

我需要检索 Windows 为注册表中的 C: 驱动器创建的唯一编号。该值是 REG_BINARY,我需要它在字符串中。当我说代码不起作用时,我的意思是当键值为:19 49 84 25 00 00 50 06 00 00 00 00 我希望将原始键值作为字符串时,它总是只返回 2 个奇怪的字符

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);
  }

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

4

1 回答 1

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

于 2013-08-09T03:59:33.303 回答