亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

C#聯合Union的實現方式

2019-11-14 13:29:58
字體:
來源:轉載
供稿:網友

一.基礎篇

        C#不像C++,他本身是沒有聯合Union的,但是可以通過手動控制結構體每個元素的位置來實現,這需要結合使用StructLayoutAttribute、LayoutKind以及FieldOffsetAttribute。使用它們的時候必須引用System.Runtime.InteropServices下面是我寫的模擬U的聯合。

[StructLayout(LayoutKind.Explicit, Size = 4)]struct U{    [FieldOffset(0)]    public byte b0;    [FieldOffset(1)]    public byte b1;    [FieldOffset(2)]    public byte b2;    [FieldOffset(3)]    public byte b3;     [FieldOffset(0)]    public int i;     [FieldOffset(0)]    public float f;}

        我們知道聯合中每個數據成員都在相同的內存地址開始,所以我們要通過[FieldOffset(0)]應用到U的每一個成員,意思就是讓這些成員處于同一個開始位置。當然,我們得事先告訴.NET這些成員的內存布局由我們來作主,所以要使用LayoutKind.Explicit枚舉然后傳遞給StructLayoutAttribute,并應用到U上,這樣.Net就不會再干涉該struct的成員在內存中的布局了。并且我定義了U的Size為12,當然你也可以不定義U的Size。

而且使用聯合進行數據轉換比BitConverter要快。測試用例如下:

{    DateTime past = DateTime.Now;    int length = 500000 * 3 * 3;    for (int i = 0; i < length; i++)    {        U a = new U();        a.b0 = 0xFF;        a.b1 = 0xFF;        int res = a.i;    }    DateTime now = DateTime.Now;    Console.WriteLine((now - past));} {    DateTime past = DateTime.Now;    int length = 500000 * 3 * 3;    for (int i = 0; i < length; i++)    {        byte[] a = { 0xFF, 0x0F, 0x0F, 0 };        object b = a;        int res = BitConverter.ToInt32(a, 0);    }    DateTime now = DateTime.Now;    Console.WriteLine((now - past));}

二.進階篇

之前的方法還存在好多問題,比如數組沒法放入聯合中,會提示值和引用沖突什么的。

今天又研究了一下,利用C#中可以使用指針的特性,結合unsafe和fixed,實現數組類型和普通值類型的共存。

方法①  數組類型和普通值類型的共存——固定大小的緩沖區

利用固定大小的緩沖區(fixed)實現數組類型和普通值類型的共存

[StructLayoutAttribute(LayoutKind.Explicit, Pack = 1)]public unsafe struct A{    [FieldOffset(0)]    public int a;    [FieldOffset(0)]    public byte b;    [FieldOffset(0)]    public float c;    [FieldOffset(0)]    public fixed byte arr[9];};

方法②  結構體轉字節數組——1).使用聯合 2).使用指針強制轉換

1).使用聯合,利用一個和原結構體等長的fixed byte buff[n],這個buff就是我們要的直接數組,訪問時需要通過fixed (byte* ta = a.buff) {}來訪問。

[StructLayoutAttribute(LayoutKind.Explicit, Pack = 1)]public unsafe struct A{    [FieldOffset(0)]    public int a;    [FieldOffset(4)]    public byte b;    [FieldOffset(5)]    public float c;    [FieldOffset(0)]    public fixed byte buff[9];};

2).直接使用指針強制轉換,通過fixed,先將結構體轉換為void *,再將其轉化為byte* b。

fixed (void * ta = &a){    byte* b = (byte*)ta ;}

3).最后通過IntPtr拷貝到C#標準的byte[]中。

byte[] Dbuff = new byte[9];IntPtr pstart = new IntPtr(a);Marshal.Copy(pstart, Dbuff, 0, 9);

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品欧美国产一区二区三区| 韩国三级电影久久久久久| 日韩欧美亚洲综合| 久久久久久久999| 亚洲精品乱码久久久久久金桔影视| 亚洲欧洲日韩国产| 国产丝袜一区二区三区| 亚洲美女视频网站| 亚洲第一男人天堂| 欧美大片欧美激情性色a∨久久| 亚洲人免费视频| 成人黄色大片在线免费观看| 超碰精品一区二区三区乱码| 久久视频这里只有精品| 日韩黄色高清视频| 国产视频福利一区| 一本久久综合亚洲鲁鲁| 92裸体在线视频网站| 1769国产精品| 欧美黄色免费网站| 亚洲sss综合天堂久久| 亚洲大胆美女视频| 国产精品jvid在线观看蜜臀| 国产精品爱久久久久久久| 91精品视频观看| 欧美日韩aaaa| 欧美电影免费观看| 久久99精品久久久久久琪琪| 日韩av在线资源| 亚洲美女av在线| 91久久在线观看| 亚洲第一色中文字幕| 姬川优奈aav一区二区| 欧美男插女视频| 青青在线视频一区二区三区| 国产在线观看精品一区二区三区| 欧美日韩国产页| 国产精品欧美日韩| 91视频88av| 日本一区二三区好的精华液| 欧美日韩性生活视频| 亚洲最大av网| 亚洲国产天堂久久国产91| 亚洲欧美国产精品专区久久| 亚洲成色777777女色窝| 精品视频在线播放色网色视频| 91在线精品播放| 欧美中文字幕视频在线观看| 久久久久国产视频| 成人伊人精品色xxxx视频| 免费av在线一区| 亚洲久久久久久久久久| 日本视频久久久| 日韩久久午夜影院| 国产成人在线视频| 超碰91人人草人人干| 日韩福利伦理影院免费| 国产男女猛烈无遮挡91| 国产亚洲人成网站在线观看| 国产一区二区欧美日韩| 午夜精品久久久久久久99黑人| 少妇精69xxtheporn| 97人人做人人爱| 美日韩精品免费视频| 欧美一级大片在线观看| 亚洲无亚洲人成网站77777| 78色国产精品| 精品人伦一区二区三区蜜桃免费| 亚洲成人动漫在线播放| 精品呦交小u女在线| 日韩va亚洲va欧洲va国产| 欧美中文字幕在线视频| 亚洲精品成a人在线观看| 日韩精品中文字幕视频在线| 亚洲免费av片| 性欧美在线看片a免费观看| 69av视频在线播放| 亚洲天堂色网站| 欧美日韩免费网站| 九九热最新视频//这里只有精品| 这里精品视频免费| 国产成人精品优优av| 清纯唯美亚洲综合| 国产中文字幕91| 精品日本美女福利在线观看| 欧美成人精品在线观看| 成人av在线网址| 亚洲网在线观看| 亚洲乱码av中文一区二区| 亚洲18私人小影院| 51精品国产黑色丝袜高跟鞋| 国产精品视频自拍| 97精品在线观看| 精品香蕉一区二区三区| 国产激情999| 欧美精品在线视频观看| 欧美精品做受xxx性少妇| 国产精品久久久久久亚洲影视| 亚洲午夜av电影| 欧美亚洲伦理www| 精品视频—区二区三区免费| 97超级碰在线看视频免费在线看| 成人性生交大片免费看视频直播| 久久国产精品网站| 亚洲影院污污.| 亚洲自拍在线观看| 欧美久久精品午夜青青大伊人| 亚洲成人黄色网| 日韩激情第一页| 欧美一级免费视频| 日韩欧美在线网址| 色婷婷av一区二区三区在线观看| 久久久国产在线视频| 亚洲网站视频福利| 粉嫩老牛aⅴ一区二区三区| 国产精品久久久久久久久久久不卡| 日日狠狠久久偷偷四色综合免费| 欧美一区二区三区图| 日韩人在线观看| 亚洲女人被黑人巨大进入| 成人免费在线视频网站| 日韩精品在线看| 韩国v欧美v日本v亚洲| 亚洲国产精品视频在线观看| 在线日韩av观看| 青青草一区二区| 欧美激情亚洲国产| 国产一区二区在线免费视频| 欧美精品日韩三级| 91在线视频免费| www.国产一区| 亚洲直播在线一区| 国产精品欧美亚洲777777| 欧美视频一区二区三区…| 国产精品久久久久免费a∨| 成人精品视频99在线观看免费| 日韩精品中文字幕有码专区| 日韩av色在线| 欧美日韩国产一区二区| 欧美国产第二页| 亚洲精品中文字幕av| 亚洲国产精品小视频| 国产69精品久久久久99| 亚洲国产精品va在线| 久久久久久久久爱| 国产精品电影在线观看| 欧美一区二区视频97| 亚洲一区二区三区xxx视频| 日本aⅴ大伊香蕉精品视频| 国产美女精品视频| 青青久久av北条麻妃海外网| 久久久成人精品视频| 色吧影院999| 欧美激情视频一区二区| 亚洲娇小xxxx欧美娇小| 欧美精品生活片| 国产精品网站视频| 亚洲欧美日韩一区在线| 欧美高清在线视频观看不卡| 中日韩美女免费视频网站在线观看| 精品久久久久久国产| 亚洲色图国产精品| 国产性猛交xxxx免费看久久| xxx成人少妇69|