1

object取得したレジストリ値を からに変換しようとしていますbyte[]。として保存されREG_BINARYます。で使っBinaryFormatterてみましたMemoryStream。ただし、不要なオーバーヘッド情報が追加されます。関数を実行してバイト配列を文字列に変換したときに、これを観察しましたConvert.ToBase64String(..)。これらの機能を実行しているのは、暗号化されたキーのレジストリへの保存と取得をテストしているためです。

4

3 に答える 3

8

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
}
于 2011-01-13T20:24:20.303 に答える
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;
}
于 2011-01-13T20:28:24.340 に答える
0

Convert.ToBase64String で変換した場合も同様に取り出せるはずです。

string regValueAsString = (string)regValueAsObj;
byte[] buf = Convert.FromBase64String(regValueAsString);
于 2011-01-13T20:24:00.793 に答える