2011-01-13 13 views
0

J'essaie de convertir une valeur de registre récupérée de object à byte[]. Il est stocké sous la forme REG_BINARY. J'ai essayé d'utiliser BinaryFormatter avec MemoryStream. Cependant, il ajoute des informations générales que je ne veux pas. J'ai observé ceci quand j'ai alors converti le tableau d'octets en chaîne en exécutant la fonction Convert.ToBase64String(..). J'effectue ces fonctions parce que je suis en train de tester le stockage et la récupération d'une clé chiffrée dans le registre.Convertir l'objet en octet []

Répondre

7

Si c'est un REG_BINARY alors il devrait déjà être un tableau d'octets lorsque vous récupériez ... ne pouvez pas vous jeter juste à byte[]?

Sinon, si vous avez pas déjà vérifié qu'il est REG_BINARY dans le code, vous pouvez utiliser:

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, oui, c'est la réponse. Je n'ai pas utilisé C# depuis un moment alors évidemment je suis rouillé. Merci de poster la réponse évidente :) –

0

Si vous l'avez converti à l'aide de Convert.ToBase64String, vous devriez pouvoir le sortir de la même manière.

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

essayer. Si c'est déjà un REG_BINARY, tout ce que vous avez à faire est de le lancer:

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