我如何定义 class 来反序列化二进制文件

How can i define a class to deserialze binary file

我想知道如何为包含大小为 19 的浮点数组的对象的二进制文件定义 class。

请参阅所附图片,了解 Hex Editor Neo 中数据的外观。当显示为 float

我试过跟随但没有成功。请告诉我这里做错了什么。

  [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 但不知道..

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

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