C#byte[]、struct、intptr等的相互转换


一、struct byte[]互相转换

      //struct转换为byte[]
       public static byte[] StructToBytes(object structObj)
       {
           int size = Marshal.SizeOf(structObj);
           IntPtr buffer = Marshal.AllocHGlobal(size);
           try
           {
               Marshal.StructureToPtr(structObj, buffer, false);
               byte[] bytes = new byte[size];
               Marshal.Copy(buffer, bytes, 0, size);
               return bytes;
           }
           finally
           {
               Marshal.FreeHGlobal(buffer);
           }
       }
 
       //byte[]转换为struct
       public static object BytesToStruct(byte[] bytes, Type type)
       {
           int size = Marshal.SizeOf(type);
           IntPtr buffer = Marshal.AllocHGlobal(size);
           try
           {
               Marshal.Copy(bytes, 0, buffer, size);
               return Marshal.PtrToStructure(buffer, type);
           }
           finally
           {
               Marshal.FreeHGlobal(buffer);
           }
       }

二、Intptr、byte[]互相转换

        //IntPtr转byte[]
IntPtr y=new IntPtr(); byte[] ys = new byte[yLength]; Marshal.Copy(y, ys, 0, yLength);

//byte[]转换为Intptr public static Intptr BytesToIntptr(byte[] bytes) { int size = bytes.Length; IntPtr buffer = Marshal.AllocHGlobal(size); try { Marshal.Copy(bytes, 0, buffer, size); return buffer; } finally { Marshal.FreeHGlobal(buffer); } }

 

 

 

来源:https://www.cnblogs.com/jhlong/p/5715015.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM