最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中結構體和字節(jié)數(shù)組轉換實現(xiàn)

 更新時間:2015年06月05日 10:17:29   投稿:junjie  
這篇文章主要介紹了C#中結構體和字節(jié)數(shù)組轉換實現(xiàn),本文直接給出了字節(jié)數(shù)組與結構體的轉換代碼,代碼中包含詳細注釋,需要的朋友可以參考下

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

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);
      //將結構體拷到分配好的內(nèi)存空間
      Marshal.StructureToPtr(structObj, structPtr, false);
      //從內(nèi)存空間拷貝到byte 數(shù)組
      Marshal.Copy(structPtr, bytes, 0, size);
      //釋放內(nèi)存空間
      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;
      }
      //分配結構體內(nèi)存空間
      IntPtr structPtr = Marshal.AllocHGlobal(size);
      //將byte數(shù)組拷貝到分配好的內(nèi)存空間
      Marshal.Copy(bytes, 0, structPtr, size);
      //將內(nèi)存空間轉換為目標結構體
      object obj = Marshal.PtrToStructure(structPtr, type);
      //釋放內(nèi)存空間
      Marshal.FreeHGlobal(structPtr);
      return obj;
    }
  }
}

相關文章

  • C#使用隊列(Queue)解決簡單的并發(fā)問題

    C#使用隊列(Queue)解決簡單的并發(fā)問題

    這篇文章主要介紹了使用隊列(Queue)解決簡單的并發(fā)問題,講解的很細致,喜歡的朋友們可以了解一下
    2015-07-07
  • C#文件讀寫操作詳細操作指南

    C#文件讀寫操作詳細操作指南

    這篇文章主要給大家介紹了關于C#文件讀寫操作詳細操作指南,在后端開發(fā)中使用C#語言進行文件操作是一個常見的任務,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • C#?將程序添加開機啟動的三種方式

    C#?將程序添加開機啟動的三種方式

    本文主要介紹了C#?將程序添加開機啟動的三種方式,主要包含開始菜單啟動,注冊表啟動項和Windows 計劃任務這三種方法,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • C#實現(xiàn)判斷圖形文件格式的方法

    C#實現(xiàn)判斷圖形文件格式的方法

    這篇文章主要介紹了C#實現(xiàn)判斷圖形文件格式的方法,包括常見的擴展名判定及文件內(nèi)容判定等,非常實用,需要的朋友可以參考下
    2014-09-09
  • C#警惕匿名方法造成的變量共享實例分析

    C#警惕匿名方法造成的變量共享實例分析

    這篇文章主要介紹了C#警惕匿名方法造成的變量共享,以實例形式分析了C#的匿名方法造成變量共享的原因及對應的解決方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • C#文件操作、讀取文件、Debug/Trace類用法

    C#文件操作、讀取文件、Debug/Trace類用法

    這篇文章介紹了C#文件操作、讀取文件、Debug/Trace類的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • C#中三種Timer計時器的詳細用法

    C#中三種Timer計時器的詳細用法

    這篇文章介紹了C#中三種Timer計時器的詳細用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#使用FileStream復制一個任意文件

    C#使用FileStream復制一個任意文件

    這篇文章主要為大家詳細介紹了C#使用FileStream復制一個任意文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C#如何提取經(jīng)緯度文件中的經(jīng)緯度數(shù)據(jù)

    C#如何提取經(jīng)緯度文件中的經(jīng)緯度數(shù)據(jù)

    近期開發(fā)時需要獲取當前的經(jīng)緯度坐標,下面這篇文章主要給大家介紹了關于C#如何提取經(jīng)緯度文件中經(jīng)緯度數(shù)據(jù)的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • Unity3D開發(fā)實戰(zhàn)之五子棋游戲

    Unity3D開發(fā)實戰(zhàn)之五子棋游戲

    這篇文章主要為大家詳細介紹了Unity3D開發(fā)實戰(zhàn)之五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09

最新評論

伊吾县| 博白县| 永昌县| 永泰县| 肥乡县| 新营市| 桐柏县| 印江| 定陶县| 兴化市| 凤冈县| 翼城县| 榆中县| 赞皇县| 云霄县| 福贡县| 都昌县| 惠东县| 高雄县| 金平| 准格尔旗| 上饶市| 长白| 页游| 科技| 盐源县| 微博| 华宁县| 丰顺县| 盐城市| 翼城县| 专栏| 教育| 邻水| 遂平县| 梓潼县| 沂水县| 阿克| 荥经县| 达拉特旗| 襄樊市|