日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
解決C#結(jié)構(gòu)體數(shù)組間的轉(zhuǎn)化

解決C#結(jié)構(gòu)體數(shù)組間的轉(zhuǎn)化問(wèn)題的由來(lái):在寫C#TCP通信程序時(shí),發(fā)送數(shù)據(jù)時(shí),如果是和VC6.0等寫的程序通信的話,很多的都是傳送結(jié)構(gòu)體,在VC6.0中可以很方便的把一個(gè)char[]數(shù)組轉(zhuǎn)換為一個(gè)結(jié)構(gòu)體,而在C#卻不能直接把byte數(shù)組轉(zhuǎn)換為結(jié)構(gòu)體,要在C#中發(fā)送結(jié)構(gòu)體,可以按以下方法實(shí)現(xiàn):

創(chuàng)新互聯(lián)是一家專業(yè)提供臨河企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、成都網(wǎng)站制作、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為臨河眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。

(1)解決C#結(jié)構(gòu)體數(shù)組間的轉(zhuǎn)化之定義結(jié)構(gòu)體:

 
 
 
  1. //命名空間  
  2. using System.Runtime.InteropServices;  
  3.  
  4. //注意這個(gè)屬性不能少  
  5. [StructLayoutAttribute(  
  6. LayoutKind.Sequential,  
  7. CharSet=CharSet.Ansi,Pack=1)]  
  8. struct TestStruct  
  9. ...{  
  10. public int c;  
  11. //字符串,SizeConst為字符串的***長(zhǎng)度  
  12. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]  
  13. public string str;  
  14. //int數(shù)組,SizeConst表示數(shù)組的個(gè)數(shù),在轉(zhuǎn)換成  
  15. //byte數(shù)組前必須先初始化數(shù)組,再使用,初始化  
  16. //的數(shù)組長(zhǎng)度必須和SizeConst一致,例test = new int[6];  
  17. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]  
  18. public int[] test;  

(2)解決C#結(jié)構(gòu)體數(shù)組間的轉(zhuǎn)化之byte數(shù)組轉(zhuǎn)結(jié)構(gòu)體:

 
 
 
  1. /**////   
  2. /// byte數(shù)組轉(zhuǎn)結(jié)構(gòu)體  
  3. ///   
  4. /// byte數(shù)組  
  5. /// 結(jié)構(gòu)體類型  
  6. /// 轉(zhuǎn)換后的結(jié)構(gòu)體  
  7. public static object BytesToStuct(byte[] bytes,Type type)  
  8. ...{  
  9. //得到結(jié)構(gòu)體的大小  
  10. int size = Marshal.SizeOf(type);  
  11. //byte數(shù)組長(zhǎng)度小于結(jié)構(gòu)體的大小  
  12. if (size > bytes.Length)  
  13. ...{  
  14. //返回空  
  15. return null;  
  16. }  
  17. //分配結(jié)構(gòu)體大小的內(nèi)存空間  
  18. IntPtr structPtr = Marshal.AllocHGlobal(size);  
  19. //將byte數(shù)組拷到分配好的內(nèi)存空間  
  20. Marshal.Copy(bytes,0,structPtr,size);  
  21. //將內(nèi)存空間轉(zhuǎn)換為目標(biāo)結(jié)構(gòu)體  
  22. object obj = Marshal.PtrToStructure(structPtr, type);  
  23. //釋放內(nèi)存空間  
  24. Marshal.FreeHGlobal(structPtr);  
  25. //返回結(jié)構(gòu)體  
  26. return obj;  

解決C#結(jié)構(gòu)體數(shù)組間的轉(zhuǎn)化的相關(guān)內(nèi)容就向你介紹到這里,希望對(duì)你學(xué)習(xí)和了解解決C#結(jié)構(gòu)體數(shù)組間的轉(zhuǎn)化方法有所幫助。


名稱欄目:解決C#結(jié)構(gòu)體數(shù)組間的轉(zhuǎn)化
網(wǎng)址分享:http://m.5511xx.com/article/djhdjco.html