2009-06-18 188 views
1

當我從外部應用程序獲取時,需要處理字節[]。外部應用程序也在c#中完成,並通過UDP發送字節。他們還派遣其在下面說明從結構轉換的字節:將非託管結構變爲使用c託管代碼#


public struct DISPATCH_MESSAGE 
{ 
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] 
    public char[] federation_name; // Units: nil  Range: nil 
} 

所以,當我得到字節,我需要拿出的char []內的是, 並獲得字符串超出該char []。

我希望我的解釋清楚。我是這種非託管編碼的新手。 請幫助我。 其迫切。謝謝。

+0

你正在讀取UDP連接的原始字節? – 2009-06-18 14:47:35

回答

2

也許你應該聲明爲ByValTStr(取決於字符串的性質,它可能會有所不同):

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] 
public struct DISPATCH_MESSAGE{ 
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] 
    public string federation_name; 
} 

UPDATE:如果它已經釋放出char[],它可能做必要轉換(包括處理編碼)正確,所以我認爲你只需要:

string str = new string(instance.federation_name); 
+0

我沒有訪問外部應用程序的權限。 任何我必須做的事,都會在我的應用程序中發生。 謝謝。 – Anuya 2009-06-18 14:57:38