我想将一个结构序列化为磁盘作为原始字节。这是它的(简化)版本。将结构编组为字节数组仅适用于单个字节?
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public class TestData :BaseStructure
{
public byte[] bytes = new byte[]{65,66,67}; // this doesn't write ABC as expected
}
甲write
函数使用ConvertStructureToBytes
方法将其转换为一个字节数组和一个二进制作家然后将其写入。
public void Write(BaseStructure baseStructure)
{
binaryWriter.Write(ConvertStructureToBytes(baseStructure));
}
的ConvertStructureToBytes
部分
public byte[] ConvertStructureToBytes(BaseStructure baseStructure)
{
int len = Marshal.SizeOf(baseStructure);
byte[] arr = new byte[len];
IntPtr ptr = Marshal.AllocHGlobal(len);
Marshal.StructureToPtr(baseStructure, ptr,false);
Marshal.Copy(ptr, arr, 0, len);
Marshal.FreeHGlobal(ptr);
return arr;
}
如果我更换字节线
public byte byte = 65; // This now writes an A , as expected
我已经试过
public byte[] bytes = Encoding.ASCII.GetBytes("ABC"); //doesn't work either
这可能有事情做与ConvertStructureToBytes
函数,它不应该像处理字节数组一样。
我需要做些什么才能成功写出'ABC'?
我编辑了你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 – 2014-09-12 21:04:25
什么是BaseStructure?你的'TestData'类继承了它,但是你没有序列化一个'TestData'实例,而是一个'BaseStructure'实例,它不知道'TestData'类中声明的数据。 – Guffa 2014-09-12 21:10:32