我如何定义 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;
}
我想知道如何为包含大小为 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;
}