2011-01-13 14 views
0

Ich versuche, einen abgerufenen Registrierungswert von object zu byte[] zu konvertieren. Es wird als REG_BINARY gespeichert. Ich habe versucht, BinaryFormatter mit MemoryStream zu verwenden. Es fügt jedoch Overhead-Informationen hinzu, die ich nicht möchte. Ich beobachtete dies, als ich dann das Byte-Array in einen String umwandelte, indem ich die Funktion Convert.ToBase64String(..) ausführte. Ich führe diese Funktionen durch, weil ich das Speichern und Abrufen eines verschlüsselten Schlüssels in der Registrierung teste.Objekt in Byte konvertieren []

Antwort

7

Wenn es ein REG_BINARY ist, dann sollte es schon sein ein Byte-Array, wenn Sie es abrufen ... kannst du nicht einfach werfen es zu byte[]?

Alternativ, wenn Sie nicht bereits verifiziert, dass es REG_BINARY im Code ist, können Sie verwenden möchten:

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

Ok, ja das ist die Antwort. Ich habe C# schon lange nicht mehr benutzt, also bin ich offensichtlich verrostet. Danke für die Veröffentlichung der offensichtlichen Antwort :) –

0

Wenn Sie es mit Convert.ToBase64String konvertiert haben, sollten Sie in der Lage sein, es ähnlich zu bekommen.

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

bereits. Wenn es bereits ein REG_BINARY ist, müssen Sie es nur umwandeln:

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; 
}