将byte []转换为对象

时间:2013-02-19 16:40:30

标签: c# serialization memorystream

我正在尝试将byte[]中的对象转换为对象。 我尝试过使用我在网上找到的代码:

object byteArrayToObject(byte[] bytes)
    {
        try
        {
            MemoryStream ms = new MemoryStream(bytes);
            BinaryFormatter bf = new BinaryFormatter();
            //ms.Position = 0;
            return bf.Deserialize(ms,null);
        }
        catch
        {
            return null;
        }
    }
  

SerializationException:“解析之前遇到的流结束是   完成“。

我已尝试使用ms.Position = 0行,当然也没有注释... bytes[]只有8个字节长,每个字节不是null

建议?

[编辑]

byte []使用

行中的内容从c ++程序写入二进制文件
void WriteToFile (std::ostream& file,T* value)
{
    file.write(reinterpret_cast<char*>(value), sizeof(*T))
}

其中价值可能是多种不同类型。 我可以使用BitConverter从文件中转换为某些对象,但任何BitConverter都没有覆盖我无法做到的事情。

1 个答案:

答案 0 :(得分:0)

正如cdhowie所说,您需要手动反序列化编码数据。根据可用的有限信息,您可能需要一个对象数组或一个包含数组的对象。看起来你有一个很长但没有办法从你的代码中知道。您将需要以其真实形式重新创建对象,因此将下面的myLong作为单个长数组的简单示例。由于它未指定,我假设你想要一个包含如下数组的结构:

public struct myLong {
    public long[] value;
}

您可以使用结构数组或对下面发布的代码稍作修改的类执行相同的操作。

您的方法将是这样的:(在编辑器中写)

private myLong byteArrayToObject(byte[] bytes) {
    try
    {
        int len = sizeof(long);
        myLong data = new myLong();
        data.value = new long[bytes.Length / len];
        int byteindex = 0;
        for (int i = 0; i < data.value.Length; i++) {
           data.value[i] = BitConverter.ToInt64(bytes,byteindex);
           byteindex += len;
        }            
        return data;
    }
    catch
    {
        return null;
    }
}