2011-01-13 2 views
0

Я пытаюсь преобразовать восстановленное значение реестра с object в byte[]. Он хранится как REG_BINARY. Я пробовал использовать BinaryFormatter с MemoryStream. Однако он добавляет служебную информацию, которую я не хочу. Я заметил это, когда я преобразовал массив байтов в строку, выполнив функцию Convert.ToBase64String(..). Я выполняю эти функции, потому что проверяю хранение и извлечение зашифрованного ключа в реестре.Преобразование объекта в байт []

ответ

7

Если это REG_BINARY то он уже должен быть байтовый массив при извлечении его ... вы не можете просто бросить его byte[]?

В качестве альтернативы, если вы еще не проверены, что это REG_BINARY в коде, вы можете использовать:

byte[] binaryData = value as byte[]; 
if (binaryData == null) 
{ 
    // Handle case where value wasn't found, or wasn't binary data 
} 
else 
{ 
    // Use binaryData here 
} 
+0

Хорошо, да, это ответ. Я не использовал C# через некоторое время, поэтому, очевидно, я ржавый. Спасибо за сообщение очевидного ответа :) –

0

Если вы конвертировали его с помощью Convert.ToBase64String, вы также сможете получить его.

string regValueAsString = (string)regValueAsObj; 
byte[] buf = Convert.FromBase64String(regValueAsString); 
5

Попробуйте это. Если это уже REG_BINARY, все, что вам нужно сделать, это отличить его:

static byte[] GetFoo() 
{ 

    var obj = Microsoft.Win32.Registry.GetValue("HKEY_LOCAL_MACHINE\\Software", "foo", null); 
    //TODO: Write a better exception for when it isn't found 
    if (obj == null) throw new Exception(); 

    var bytearray = obj as byte[]; 
    //TODO: Write a better exception for when its found but not a REG_BINARY 
    if (bytearray == null) throw new Exception(); 

    return bytearray; 
} 
Смежные вопросы