2009-06-18 2 views
1

Мне нужно обработать байты [], когда я получаю из внешнего приложения. Внешнее приложение также выполняется в C#, и они отправляют байты через UDP. Они посылают байт преобразованных из структуры, которая излагается ниже:Маршал Неуправляемая структура для управляемого кода с использованием C#


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

Так что, когда я получаю байты, мне нужно вынуть символ [] внутри, что, и получить строка из этого символа [].

Я надеюсь, что мои разъяснения понятны. Я новичок в этом неуправляемом кодировании. Пожалуйста, помогите мне в этом. Его срочный. Благодарю.

+0

Вы читаете необработанные байты из UDP-соединения? –

ответ

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

+0

привет, как я могу получить экземпляр в string str = новая строка (имя экземпляра.federation_name); ??? Спасибо. Я новичок в этом. – Anuya

+0

Возможно, есть функция, которая возвращает (или принимает) такой экземпляр ... Разве нет? Если нет, то в чем смысл использования этой структуры? –

Смежные вопросы