1

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

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

其中 value 可能是许多不同的类型。我可以使用 BitConverter 从文件中转换为一些对象,但是 BitConverter 没有涵盖的任何内容我都做不到..

4

1 回答 1

0

正如 cdhowie 所说,您将需要手动反序列化编码数据。根据可用的有限信息,您可能需要对象数组或包含数组的对象。看起来您有一个 long 但无法从您的代码中知道。您将需要以真实形式重新创建对象,因此以下面的 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;
    }
}
于 2013-02-19T21:15:32.000 回答