将对象转换为byte []

时间:2011-01-13 20:20:43

标签: c# object bytearray memorystream binaryformatter

我正在尝试将检索到的注册表值从object转换为byte[]。它存储为REG_BINARY。我尝试将BinaryFormatterMemoryStream一起使用。但是,它增加了我不想要的开销信息。当我通过执行函数Convert.ToBase64String(..)将字节数组转换为字符串时,我观察到了这一点。我正在执行这些功能,因为我正在测试在注册表中存储和检索加密密钥。

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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;
}

答案 2 :(得分:0)

如果你使用Convert.ToBase64String转换它,你应该能够以类似方式解决它。

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