青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天下

記錄修行的印記

C#中結構體與字節流互相轉換

 

一、c#結構體

1、定義與C++對應的C#結構體

在c#中的結構體不能定義指針,不能定義字符數組,只能在里面定義字符數組的引用。
C
++的消息結構體如下:
//消息格式 4+16+4+4= 28個字節
struct cs_message{
         u32_t        cmd_type;
         
char username[16];
         u32_t        dstID;
         u32_t        srcID;
};
C#定義的結構體如下:
[StructLayout(LayoutKind.Sequential, Pack 
= 1)]
    
public struct my_message
    {
        
public UInt32  cmd_type;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst 
= 16)]
        
public string username;    
        
public UInt32  dstID;
        
public UInt32  srcID;
        
public my_message(string s)
        {
            cmd_type 
= 0;
            username 
= s;
            dstID 
= 0;
            srcID 
= 0;
        }
}
在C
++的頭文件定義中,使用了 #pragma pack 1 字節按1對齊,所以C#的結構體也必須要加上對應的特性,LayoutKind.Sequential屬性讓結構體在導出到非托管內存時按出現的順序依次布局,而對于C++的char數組類型,C#中可以直接使用string來對應,當然了,也要加上封送的特性和長度限制。
2、結構體與byte[]的互相轉換

定義一個類,里面有2個方法去實現互轉:
public class Converter
{
        
public Byte[] StructToBytes(Object structure)
        {
            Int32 size 
= Marshal.SizeOf(structure);
            Console.WriteLine(size);
            IntPtr buffer 
= Marshal.AllocHGlobal(size);
            
try
            {
                Marshal.StructureToPtr(structure, buffer, 
false);
                Byte[] bytes 
= new Byte[size];
                Marshal.Copy(buffer, bytes, 
0, size);
                
return bytes;
            }
            
finally
            {
                Marshal.FreeHGlobal(buffer);
            }
        }
        
public Object BytesToStruct(Byte[] bytes, Type strcutType)
        {
            Int32 size 
= Marshal.SizeOf(strcutType);
            IntPtr buffer 
= Marshal.AllocHGlobal(size);
            
try
            {
                Marshal.Copy(bytes, 
0, buffer, size);
                
return Marshal.PtrToStructure(buffer, strcutType);
            }
            
finally
            {
                Marshal.FreeHGlobal(buffer);
            }
        }
}
3、測試結果:

static void Main(string[] args)
{
    
//定義轉換類的一個對象并初始化
Converter Convert = new Converter();
//定義消息結構體
    my_message m;
 
    
//初始化消息結構體
    m = new my_message("yanlina");
    m.cmd_type 
= 1633837924;
    m.srcID 
= 1633837924;
m.dstID 
= 1633837924;
 
//使用轉換類的對象的StructToBytes方法把m結構體轉換成Byte
Byte[] message = Convert.StructToBytes(m);
//使用轉換類的對象的BytesToStruct方法把Byte轉換成m結構體
my_message n = (my_message)Convert.BytesToStruct(message, m.GetType());
//輸出測試
    Console.WriteLine(Encoding.ASCII.GetString(message));
    Console.WriteLine(n.username);
}
結構體的size是28個字節和c
++的結構體一樣,同時可以將結構體和字節數組互轉,方便UDP的發送和接收。


轉自:http://blog.csdn.net/huxiangyang4/article/details/5853247

posted on 2012-09-20 11:37 天下 閱讀(2148) 評論(0)  編輯 收藏 引用 所屬分類: C#

<2012年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

導航

統計

常用鏈接

留言簿(4)

隨筆分類(378)

隨筆檔案(329)

鏈接

最新隨筆

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲视频一区二区| 欧美一激情一区二区三区| 可以看av的网站久久看| 午夜久久久久久| 黑人巨大精品欧美一区二区小视频| 久久久99免费视频| 久久精品国产77777蜜臀| 在线精品视频一区二区| 亚洲国产经典视频| 欧美日本精品一区二区三区| 日韩午夜电影av| 在线亚洲欧美| 在线成人免费观看| 亚洲第一主播视频| 国产精品国产三级欧美二区 | 女女同性精品视频| 中日韩男男gay无套| 欧美一区二区在线免费观看| 最近看过的日韩成人| 理论片一区二区在线| 国产精品99久久久久久有的能看| 国产精品久久久久久久久免费| 午夜电影亚洲| 欧美黄色一区| 久久久蜜桃一区二区人| 欧美日本亚洲韩国国产| 久久久久综合一区二区三区| 欧美久久久久免费| 久久这里只有| 国产精品乱码一区二三区小蝌蚪| 欧美福利视频| 国产在线成人| 亚洲午夜国产成人av电影男同| 亚洲大片av| 欧美永久精品| 亚洲欧美日韩国产精品| 裸体素人女欧美日韩| 欧美一区在线直播| 欧美日韩系列| 亚洲国产精品123| 激情久久五月天| 亚洲欧美日本伦理| 亚洲一二区在线| 欧美精品黄色| 欧美激情免费在线| 亚洲电影观看| 久久人人爽人人爽爽久久| 欧美一级在线播放| 国产精品伦子伦免费视频| 亚洲精品一区二区网址| 亚洲啪啪91| 久久综合一区二区| 久久久精品欧美丰满| 国产欧美高清| 亚洲欧美国产日韩中文字幕| 亚洲一区二区免费在线| 欧美人与禽性xxxxx杂性| 欧美高清视频www夜色资源网| 国产真实乱偷精品视频免| 亚洲欧美日韩一区二区三区在线观看 | 国产精品狼人久久影院观看方式| 亚洲欧洲在线一区| 91久久亚洲| 你懂的成人av| 亚洲欧洲偷拍精品| 亚洲精品一区在线观看| 欧美韩日一区二区| 亚洲精品欧美激情| 一区二区高清视频| 欧美吻胸吃奶大尺度电影| 一本综合久久| 欧美一区二区日韩一区二区| 国产日韩av在线播放| 欧美伊久线香蕉线新在线| 久久亚洲电影| 亚洲日本激情| 欧美三级不卡| 欧美一区二区三区视频免费| 久久女同互慰一区二区三区| 亚洲国产精品嫩草影院| 欧美激情在线狂野欧美精品| 夜夜嗨一区二区| 136国产福利精品导航| 国产欧美一区二区精品婷婷| 这里只有精品视频| 欧美一区二区视频97| 韩国欧美国产1区| 毛片一区二区| 亚洲午夜免费视频| 久久精品中文字幕一区| 18成人免费观看视频| 欧美视频在线一区二区三区| 欧美中文字幕在线观看| 亚洲国产另类 国产精品国产免费| 亚洲永久字幕| 永久免费精品影视网站| 欧美日韩精品系列| 小嫩嫩精品导航| 亚洲国产日韩在线| 久久国产日韩欧美| 亚洲九九爱视频| 国产视频在线观看一区| 欧美fxxxxxx另类| 亚洲欧美中文日韩v在线观看| 欧美激情区在线播放| 欧美一激情一区二区三区| 亚洲精品视频在线观看免费| 国产精品一区免费观看| 欧美高清一区二区| 久久精品视频在线观看| 一区二区三区av| 亚洲国产精品电影| 久久免费黄色| 性做久久久久久免费观看欧美| 亚洲精品乱码久久久久久日本蜜臀 | 99精品欧美一区| 美女爽到呻吟久久久久| 欧美亚洲视频一区二区| 日韩视频在线免费观看| 黑人中文字幕一区二区三区| 国产麻豆综合| 欧美色道久久88综合亚洲精品| 久久综合久久综合这里只有精品 | 亚洲一区二区免费| 日韩一区二区精品视频| 亚洲国产成人精品视频| 奶水喷射视频一区| 裸体素人女欧美日韩| 久久激情综合网| 欧美一区二区免费| 亚洲主播在线观看| 亚洲网友自拍| 亚洲视频久久| 亚洲一区中文| 亚洲欧美日韩一区二区在线 | 夜夜爽www精品| 99re在线精品| 一本一本久久| 亚洲网在线观看| 亚洲欧美日韩成人| 亚久久调教视频| 久久久久一区二区三区四区| 久久久国产精品一区二区中文 | 亚洲东热激情| 91久久线看在观草草青青| 亚洲国产成人tv| 亚洲精品一二区| 99视频精品在线| 亚洲视频精选| 欧美在线观看你懂的| 久久精品一区二区三区不卡| 亚洲承认在线| 91久久精品一区二区三区| 亚洲美女中文字幕| 亚洲作爱视频| 亚洲女同精品视频| 久久婷婷av| 亚洲福利精品| 亚洲天堂成人在线视频| 性8sex亚洲区入口| 久久欧美中文字幕| 欧美日韩国产小视频| 国产精品每日更新| 一色屋精品视频在线观看网站| 91久久国产精品91久久性色| 9色精品在线| 久久久精品2019中文字幕神马| 免费不卡在线视频| 亚洲精品欧美一区二区三区| 亚洲你懂的在线视频| 美女露胸一区二区三区| 国产精品a久久久久| 国产一区二区三区久久| 亚洲人成久久| 久久久99国产精品免费| 最新国产拍偷乱拍精品| 欧美在线高清视频| 欧美日韩综合网| 亚洲第一主播视频| 欧美一级久久久| 91久久视频| 久久久人人人| 国产精品区一区二区三| 亚洲国产精品一区二区第一页| 亚洲自拍电影| 亚洲国产精品久久久久| 欧美一区二区高清在线观看| 欧美日韩国产在线看| 一区在线观看视频| 欧美亚洲一区二区在线| 亚洲国产精品精华液2区45| 欧美一级在线视频| 欧美日韩精品一区二区天天拍小说| 韩日视频一区| 亚洲伊人伊色伊影伊综合网| 亚洲国产精品一区在线观看不卡| 亚洲欧美日韩综合国产aⅴ| 欧美日韩的一区二区| 亚洲激情图片小说视频| 欧美一区观看|