C# Byte[] 转struct时候遭遇exception
namespace ByteToStruct
{
class Program
{
static void Main(string[] args)
{
FileStream f = new FileStream("test.dbf", FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(f);
//BinaryWriter bw = new BinaryWriter(f);
test_struct str = new test_struct();
byte[] bt = new byte[Marshal.SizeOf(str)];
br.Read(bt, 0, Marshal.SizeOf(str));
str = (test_struct)BytesToStruts(bt,str.GetType());
}
public static object BytesToStruts(byte[] bytes, Type type)
{
//得到结构体的大小
int size = Marshal.SizeOf(type);
//byte数组长度小于结构体的大小
if (size > bytes.Length)
{
//返回空
return null;
}
//分配结构体大小的内存空间
IntPtr structPtr = Marshal.AllocHGlobal(size);
//将byte数组拷到分配好的内存空间
Marshal.Copy(bytes, 0, structPtr, size);
//将内存空间转换为目标结构体
object obj = Marshal.PtrToStructure(structPtr, type);
//释放内存空间
Marshal.FreeHGlobal(structPtr);
//返回结构体
return obj;
}
}
}
test_struct里面就两个字段一个int类型的id另外一个string类型的name
------解决方案--------------------
------解决方案--------------------string类型和int不同,想通过二进制的读写来完成序列化和反序列化不行的,用2楼说的BinaryFormatter来完成对象的序列化和反序列化