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

标签 c# protobuf-net

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

请参阅所附图片,了解十六进制编辑器 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 有关,但不知道..

最佳答案

您可以将 float 加载到列表,然后将其拆分为 channel ,例如

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

关于c# - 我如何定义一个类来反序列化二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40828477/

相关文章:

Protobuf-net 错误 - 序列化设置为 null 的固定数组

c# - protobuf-net 忽略 [KnownType] 并需要添加 ProtoInclude

c# - 使用 protobuf-net 序列化不可变集合

c# - C#UWP MediaPlayer在模拟器上崩溃

c# - 如何动态创建Sharepoint ComboBox?

c# - 测试接口(interface)存储库

c# - 如何触发当前类(class)无法触及的事件?

c# - protobuf-net 使用字符串类型作为代理项

c# - Protobuf-net 序列化创建十六进制字符

c# - 需要对复杂的物体进行排序,例如多米诺骨牌