public static TestStruct FromBinaryReaderBlock(BinaryReader br)
{ //Read byte array byte[] buff = br.ReadBytes(Marshal.SizeOf(typeof(TestStruct)));
//Make sure that the Garbage Collector doesn't move our buffer
GCHandle handle = GCHandle.Alloc(buff, GCHandleType.Pinned);
//Marshal the bytes TestStruct s = (TestStruct)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(TestStruct));
handle.Free();//Give control of the buffer back to the GC
return s;
}
想用这段程序,但结构是直接指定的,如果结构是个变量应该怎么写?
就像这个样子的
/// byte数组转结构
public object RawDeserialize(byte[] bytes, Type anytype)
{
int size = Marshal.SizeOf(anytype); //得到结构的大小
if (size > bytes.Length)//byte数组长度小于结构的大小
{
return null;//返回空
}
IntPtr structPtr = Marshal.AllocHGlobal(size);//分配结构大小的内存空间
Marshal.Copy(bytes, 0, structPtr, size); //将byte数组拷到分配好的内存空间
object obj = Marshal.PtrToStructure(structPtr, anytype);//将内存空间转换为目标结构
Marshal.FreeHGlobal(structPtr); //释放内存空间
return obj;//返回结构
}
什么意思,没看懂,你的意思是想:TestStruct ts=FromBinaryReaderBlock(br);想这么用?
对不同的二进制文件要定义不同的结构STRUCT, 我不可能每读一个文件都写这样一个函数,所以想把结构弄成一个变量再调用.