欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ù)傳輸?,F(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)文章

  • VSCode調(diào)試C#程序及附缺失.dll文件的解決辦法

    VSCode調(diào)試C#程序及附缺失.dll文件的解決辦法

    這篇文章主要介紹了VSCode調(diào)試C#程序及附缺失.dll文件的解決辦法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • C#實現(xiàn)HSL顏色值轉(zhuǎn)換為RGB的方法

    C#實現(xiàn)HSL顏色值轉(zhuǎn)換為RGB的方法

    這篇文章主要介紹了C#實現(xiàn)HSL顏色值轉(zhuǎn)換為RGB的方法,涉及C#數(shù)值判定與轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • c#項目將dll打包到exe中的步驟

    c#項目將dll打包到exe中的步驟

    這篇文章主要介紹了c#項目將dll打包到exe中的步驟,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-04-04
  • 在winform下實現(xiàn)左右布局多窗口界面的方法

    在winform下實現(xiàn)左右布局多窗口界面的方法

    在web頁面上我們可以通過frameset,iframe嵌套框架很容易實現(xiàn)各種導(dǎo)航+內(nèi)容的布局界面,而在winform、WPF中實現(xiàn)其實也很容易,通過本文給大家介紹在winform下實現(xiàn)左右布局多窗口界面的方法,本文介紹的非常詳細(xì),對winform布局相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02
  • C#實現(xiàn)將像素轉(zhuǎn)換為頁面單位的方法

    C#實現(xiàn)將像素轉(zhuǎn)換為頁面單位的方法

    這篇文章主要介紹了C#實現(xiàn)將像素轉(zhuǎn)換為頁面單位的方法,涉及C#像素轉(zhuǎn)換在圖形繪制中的技巧,需要的朋友可以參考下
    2015-06-06
  • C#實現(xiàn)利用泛型將DataSet轉(zhuǎn)為Model的方法

    C#實現(xiàn)利用泛型將DataSet轉(zhuǎn)為Model的方法

    這篇文章主要介紹了C#實現(xiàn)利用泛型將DataSet轉(zhuǎn)為Model的方法,實例分析了C#泛型的相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • HttpWebRequest出錯.Section=ResponseHeader Detail=CR

    HttpWebRequest出錯.Section=ResponseHeader Detail=CR

    HttpWebRequest出錯.Section=ResponseHeader Detail=CR...
    2007-03-03
  • C#實現(xiàn)字體旋轉(zhuǎn)的方法

    C#實現(xiàn)字體旋轉(zhuǎn)的方法

    這篇文章主要介紹了C#實現(xiàn)字體旋轉(zhuǎn)的方法,涉及C#通過Matrix實現(xiàn)字體旋轉(zhuǎn)效果的方法,需要的朋友可以參考下
    2015-06-06
  • C#實現(xiàn)簡單的計算器小功能

    C#實現(xiàn)簡單的計算器小功能

    這篇文章主要為大家詳細(xì)介紹了C#實現(xiàn)簡單的計算器小功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C# 繪制實時折線圖,波形圖

    C# 繪制實時折線圖,波形圖

    這篇文章主要介紹了C# 繪制實時折線圖,波形圖的方法,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評論