Как я могу читать двоичные данные из реестра в массив байтов

Я сохранил массив байтов в реестр, используя следующий код

Byte[] value = new byte[16]{
    0x4a,0x03,0x00,0x00, 
    0x45,0x02,0x00,0x00, 
    0xb7,0x00,0x00,0x00, 
    0x9d,0x00,0x00,0x00
};

RegistryKey key = Registry.CurrentUser.CreateSubKey(KeyName);
key.SetValue(@"SoftwareSoftwareKey", value, RegistryValueKind.Binary);

- вот ключ, созданный с помощью выше код:

[HKEY_CURRENT_USERSoftwareSoftwareKey]  
    "LOC"=hex:4a,03,00,00,45,02,00,00,b7,00,00,00,9d,00,00,00

Теперь я хочу прочитать те же данные обратно в байтовый массив. Следующий код может считывать те же данные, но вывод имеет тип object.

RegistryKey key = Registry.CurrentUser.OpenSubKey(KeyName);
object obj =  key.GetValue(@"SoftwareSoftwareKey", value);

здесь приведение к byte[] не работает. Я знаю, что могу использовать сериализатор или потоки для достижения этой задачи. Я хотел бы знать, есть ли более простой способ считывания данных обратно в байт[] тип (двухстрочный код)?

обратите внимание этот вопрос на C++

2 ответов


для записи массива байтов в реестр используйте следующий код

Byte[] value = new byte[]{
    0x4a,0x03,0x00,0x00, 
    0x45,0x02,0x00,0x00, 
    0xb7,0x00,0x00,0x00, 
    0x9d,0x00,0x00,0x00
};

RegistryKey key = Registry.CurrentUser.CreateSubKey(KeyName);
key.SetValue(@"Software\AppName\Key", value, RegistryValueKind.Binary);

для извлечения данных из реестра в формат Byte[] используйте следующее:

RegistryKey key = Registry.CurrentUser.OpenSubKey(KeyName);
byte[] Data =  (byte[]) key.GetValue(@"Software\AppName\Key", value);

Примечание: CurrentUser - это имя корня для вашего ключевого местоположения и указывает на HKEY_CURRENT_USER


Я тестирую в VB.NET:

Dim obj As Object = key.GetValue("Software\Software\Key", value__1)`
Dim v As [Byte]() = CType(obj, Byte())`

и работает

поэтому в C# должно быть:

Byte[] v = Convert.ToByte(obj);