如何定义一个类来反序列化二进制文件

时间:2016-11-27 11:36:40

标签: c# protobuf-net

我想知道如何为二进制文件定义一个类,该文件包含float数组大小为19的对象。

请参阅Hex Editor Neo中数据的附图。当显示为float

enter image description here

我试过以下但没有运气。请告诉我这里做错了什么。

  [ProtoContract]
public class ChannelData
{
    [ProtoMember(1)]
    public List<float> array = new List<float>(19);
}

using (var file = File.OpenRead("0.cnl"))
{
  ChannelData newchannel = Serializer.Deserialize<ChannelData>(file);
}

我正在使用protobuff进行反序列化。三江源!

该二进制文件未使用任何二进制序列化程序对其原始文件进行序列化。 所以我认为它不能使用任何反序列化器反序列化?可能需要使用BitConverter,但不知道..

1 个答案:

答案 0 :(得分:0)

您可以将浮点数加载到列表中,然后将其拆分为频道,例如

public static unsafe List<float> LoadToList(byte[] bytes)
    {
        var list = new List<float>();
        var step = sizeof (float);
        for (int i = 0; i < bytes.Length; i += step)
        {
            fixed (byte* pbyte = &bytes[i])
            {
                list.Add(*((float*)pbyte));
            }
        }

        return list;
    }