2013-08-09 2 views
0

Код ниже не работает для меня, и я не знаю почему. (Я прочитал 2 матча в разделе «Вопросы, которые могут уже иметь ваш ответ», но не помогло.)Как получить значение REG_BINARY из реестра и преобразовать в строку

Мне нужно получить уникальный номер, который 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); 
    } 

Примечание: Я знаю, что это значение может измениться, если диск переформатирован или OS повторно установлен, но это нормально для меня до тех пор, как он привязан к этой конкретной машине.

ответ

2

Вы пытаетесь интерпретировать что-то, что не является строкой в ​​виде строки.

всегда возвращают только 2 странных символы

Вы получаете два Юникод из первых 4 байт, то 00 00 байт действуют как строка терминатор.

Если вы хотите выход как "19-49-84-25-00-00-50-06-00-00-00-00", то вы можете сделать это вместо:

var str = BitConverter.ToString(machineID); 

Смотрите этот вопрос, «byte[] to hex string» для получения более подробной информации и опций.