2009-06-18 136 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