国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#中結構體和字節數組轉換實現

2020-01-24 01:47:02
字體:
來源:轉載
供稿:網友

最近在使用結構體與字節數組轉化來實現socket間數據傳輸。現在開始整理一下。對于Marshal可以查閱msdn,關于字節數組與結構體轉代碼如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Runtime.InteropServices;namespace FileSendClient{   [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]  struct StructDemo  {        public byte a;    public byte c;    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]    public byte[] b;    public byte d;    public int e;      }  unsafe class Program  {    static void Main(string[] args)    {      StructDemo sd;      sd.a = 0;      sd.d = 0;      sd.c = 0;      sd.b = new byte[3] { 0, 0, 1 };      sd.e = 5;      int size = 0;      //此處使用非安全代碼來獲取到StructDemo的值      unsafe      {        size = Marshal.SizeOf(sd);      }             byte[] b = StructToBytes(sd,size);       ByteToStruct(b, typeof(StructDemo));     }      //將Byte轉換為結構體類型    public static byte[] StructToBytes(object structObj,int size)    {      StructDemo sd;      int num = 2;      byte[] bytes = new byte[size];      IntPtr structPtr = Marshal.AllocHGlobal(size);      //將結構體拷到分配好的內存空間      Marshal.StructureToPtr(structObj, structPtr, false);      //從內存空間拷貝到byte 數組      Marshal.Copy(structPtr, bytes, 0, size);      //釋放內存空間      Marshal.FreeHGlobal(structPtr);      return bytes;     }     //將Byte轉換為結構體類型    public static object ByteToStruct(byte[] bytes, Type type)    {      int size = Marshal.SizeOf(type);      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;    }  }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永吉县| 泰兴市| 武陟县| 山阳县| 日喀则市| 阳江市| 望谟县| 财经| 滁州市| 古丈县| 滁州市| 阿拉善盟| 台前县| 会理县| 罗田县| 杨浦区| 东丰县| 天祝| 哈巴河县| 新竹县| 饶平县| 通化县| 德清县| 慈溪市| 固原市| 宝坻区| 高要市| 伽师县| 清水县| 昔阳县| 桃江县| 台江县| 浦北县| 海门市| 兴山县| 双鸭山市| 县级市| 来安县| 浦县| 南川市| 曲阳县|