我想知道如何为包含大小为 19 的 float 组的对象的二进制文件定义一个类。
请参阅所附图片,了解十六进制编辑器 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 有关,但不知道..
最佳答案
您可以将 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/