2013-01-17 10 views
6

Uratowałem tablicy bajtów do rejestru używając następującego koduJak można odczytać dane binarne z rejestru do tablicy bajtów

Byte[] value = new byte[16]{ 
    0x4a,0x03,0x00,0x00, 
    0x45,0x02,0x00,0x00, 
    0xb7,0x00,0x00,0x00, 
    0x9d,0x00,0x00,0x00 
}; 

RegistryKey key = Registry.CurrentUser.CreateSubKey(KeyName); 
key.SetValue(@"Software\Software\Key", value, RegistryValueKind.Binary); 

Oto klucz tworzony przy użyciu powyżej kodu:

[HKEY_CURRENT_USER\Software\Software\Key] 
    "LOC"=hex:4a,03,00,00,45,02,00,00,b7,00,00,00,9d,00,00,00 

teraz chcę aby odczytać te same dane z powrotem do formatu tablicy bajtowej. Poniższy kod może odczytać te same dane, ale wyjście jest typu obiektu.

RegistryKey key = Registry.CurrentUser.OpenSubKey(KeyName); 
object obj = key.GetValue(@"Software\Software\Key", value); 

Tutaj rzutowanie na bajt [] nie działa. Wiem, że mogę użyć serializera lub strumieni, aby osiągnąć to zadanie. Chciałbym wiedzieć, czy istnieje łatwiejszy sposób odczytywania danych z powrotem do typu bajtowego [] (kod A dwu liniowy)?

Uwaga this question jest w C++

+1

Obsada powinna działać . Jaki błąd dostałeś? –

+2

Co to jest "Wartość" w twoim przypadku? Po prostu zapisz zmienną instancji 'value' jako taką i odrzuć ją. to powinno zadziałać. – nawfal

+0

@nawfal, Dzięki za odpowiedź. To był mój błąd w kodowaniu. skrytykowałeś mój błąd. Obiekt 'Wartość' i' wartość' były różne. Z tego powodu otrzymuję komunikat o błędzie "Nieprawidłowe przesyłanie". Zmieniłem moje pytanie i zamierzam je zachować na przyszłość. Jeszcze raz dziękuję – AaA

Odpowiedz

5

Aby napisać tablica bajtów do użycia w rejestrze zgodnie z kodem

Byte[] value = new byte[]{ 
    0x4a,0x03,0x00,0x00, 
    0x45,0x02,0x00,0x00, 
    0xb7,0x00,0x00,0x00, 
    0x9d,0x00,0x00,0x00 
}; 

RegistryKey key = Registry.CurrentUser.CreateSubKey(KeyName); 
key.SetValue(@"Software\AppName\Key", value, RegistryValueKind.Binary); 

Aby pobrać dane z powrotem z rejestru w Byte [] Zastosowanie formatu następuje:

RegistryKey key = Registry.CurrentUser.OpenSubKey(KeyName); 
byte[] Data = (byte[]) key.GetValue(@"Software\AppName\Key", value); 

Uwaga: CurrentUser jest nazwa pierwiastka dla Key lokalizacji i punktów HKEY_CURRENT_USER

-1

przetestować w VB.NET:

Dim obj As Object = key.GetValue("Software\Software\Key", value__1)` 
Dim v As [Byte]() = CType(obj, Byte())` 

i działa

więc w C# powinno być:

Byte[] v = Convert.ToByte(obj); 
+2

Dziękuję za odpowiedź, ale 'Convert.ToByte' zwraca" pojedynczy bajt " – AaA

Powiązane problemy