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

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

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

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

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轉(zhuǎn)換為結(jié)構(gòu)體類型
    public static byte[] StructToBytes(object structObj,int size)
    {
      StructDemo sd;
      int num = 2;
      byte[] bytes = new byte[size];
      IntPtr structPtr = Marshal.AllocHGlobal(size);
      //將結(jié)構(gòu)體拷到分配好的內(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轉(zhuǎn)換為結(jié)構(gòu)體類型
    public static object ByteToStruct(byte[] bytes, Type type)
    {
      int size = Marshal.SizeOf(type);
      if (size > bytes.Length)
      {
        return null;
      }
      //分配結(jié)構(gòu)體內(nèi)存空間
      IntPtr structPtr = Marshal.AllocHGlobal(size);
      //將byte數(shù)組拷貝到分配好的內(nèi)存空間
      Marshal.Copy(bytes, 0, structPtr, size);
      //將內(nèi)存空間轉(zhuǎn)換為目標(biāo)結(jié)構(gòu)體
      object obj = Marshal.PtrToStructure(structPtr, type);
      //釋放內(nèi)存空間
      Marshal.FreeHGlobal(structPtr);
      return obj;
    }
  }
}

相關(guān)文章

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

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

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

    C#文件讀寫操作詳細(xì)操作指南

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

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

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

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

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

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

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

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

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

    C#中三種Timer計時器的詳細(xì)用法

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

    C#使用FileStream復(fù)制一個任意文件

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

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

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

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

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

最新評論

禹城市| 商河县| 惠安县| 盘锦市| 嵊州市| 鄢陵县| 湖北省| 彭泽县| 石楼县| 玉山县| 崇州市| 毕节市| 六安市| 古交市| 华坪县| 灵山县| 林甸县| 元氏县| 广汉市| 长岭县| 育儿| 中西区| 奉节县| 八宿县| 镇原县| 玉屏| 广水市| 芜湖市| 会泽县| 津市市| 大城县| 高陵县| 吉水县| 伊金霍洛旗| 马山县| 静乐县| 盐边县| 绥滨县| 漠河县| 吴堡县| 南汇区|