如何从注册表中读取二进制数据到字节数组?

10

我使用以下代码将byte数组保存到注册表中:

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

这是使用上述代码创建的密钥:

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

现在我想将相同的数据以字节数组格式读回。以下代码可以读取相同的数据,但输出类型为对象。

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

在这里将其转换为byte[]无法正常工作。我知道我可以使用序列化程序或流来实现此任务。我想知道是否有更简单的方法将数据读回byte[]类型(两行代码)?

请注意,此问题是关于C++的。


1
转换应该可以正常工作。你遇到了什么错误? - Tony Hopkinson
2
在你的情况下,“Value”是什么?只需将实例变量“value”保存为这样并进行强制转换即可。那应该可以工作。 - nawfal
@nawfal,感谢您的回答。这是我的编码错误。您发现了我的错误。对象“Value”和“value”是不同的。这就是我收到“无效转换”错误的原因。我编辑了我的问题,并将其保留供将来参考。再次感谢。 - AaA
请勿编辑问题。添加答案。 - David Heffernan
2个回答

11

要将字节数组写入注册表,请使用以下代码

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

要将数据从注册表检索回来并转换为Byte[]格式,请使用以下方法:

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

注意:CurrentUser是您的Key位置的根名称,指向HKEY_CURRENT_USER


-1

我在VB.NET中进行测试:

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

它可以工作

因此在C#中应该是:

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

2
谢谢您的回答,但是Convert.ToByte返回一个单字节 - AaA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接