Преобразовать объект в байт [] - PullRequest
1 голос
/ 13 января 2011

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

Ответы [ 3 ]

8 голосов
/ 13 января 2011

Если это 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
}
5 голосов
/ 13 января 2011

Попробуй это. Если это уже 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;
}
0 голосов
/ 13 января 2011

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

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