using System;
using System.Runtime.InteropServices;
namespace Intptr2Byte
{
class Program
{
static void Main(string[] args)
{
Student student1 = new Student() { Name = "张三", Age = "7" };
Student student2 = new Student() { Name = "张三333", Age = "17" };
Student[] students = new Student[] { student1, student2 };
byte[] by1 = Intptr2byte(student1);
byte[] by2 = Intptr2byte(student2);
byte[] data = new byte[by1.Length + by2.Length];
by1.CopyTo(data, 0);
by2.CopyTo(data, by1.Length);
object obj = Byte2Inptr(data, typeof(Student));
Console.ReadKey();
}
static byte[] Intptr2byte(object obj)
{
int size = Marshal.SizeOf(obj);
IntPtr intPtr = Marshal.AllocHGlobal(size);
try
{
Marshal.StructureToPtr(obj, intPtr, false);
byte[] by = new byte[size];
Marshal.Copy(intPtr, by, 0, by.Length);
return by;
}
catch (Exception ex)
{
Marshal.FreeHGlobal(intPtr);
}
return null;
}
static object[] Byte2Inptr(byte[] by, Type type)
{
int size = Marshal.SizeOf(type);
IntPtr intPtr = Marshal.AllocHGlobal(size);
try
{
object[] obj = new object[2];
for (int i = 0; i < obj.Length; i++)
{
byte[] by1 = new byte[size];
Array.Copy(by, i * size, by1, 0, size);
Marshal.Copy(by1, 0, intPtr, by1.Length);
//intPtr = new IntPtr(BitConverter.ToInt32(by1,0));
obj[i] = Marshal.PtrToStructure(intPtr, type);
}
return obj;
}
catch (Exception ex)
{
Marshal.FreeHGlobal(intPtr);
}
return null;
}
}
[StructLayout(LayoutKind.Sequential,Pack = 1)]
public struct Student
{
public string Name { get; set; }
public string Age { get; set; }
}
}
数组 byte[] Intptr 互转
最新推荐文章于 2024-02-22 19:03:18 发布