Маршал Неуправляемая структура в управляемый код с использованием C #

StackOverflow https://stackoverflow.com/questions/1013024

Вопрос

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

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

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

Я новичок в этом виде неуправляемого кодирования.

Это было полезно?

Решение

Вероятно, вы должны объявить его как ByValTStr (в зависимости от характера строки он может быть другим):

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

ОБНОВЛЕНИЕ: Если он уже выдает char [] , вероятно, он правильно выполняет необходимое преобразование (включая обработку кодирования), поэтому я думаю, что вам просто нужно

string str = new string(instance.federation_name);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top