Marshal não gerenciado estrutura para código gerenciado usando C #
-
06-07-2019 - |
Pergunta
Eu preciso para processar os bytes [] quando eu recebo de aplicação externa. A aplicação externa também é feito em C # e eles enviar os bytes através de UDP. Eles estão enviando os bytes convertido de struct qual está demonstrada abaixo:
public struct DISPATCH_MESSAGE
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public char[] federation_name; // Units: nil Range: nil
}
Então, quando eu chegar os bytes, eu preciso tirar o char [] dentro disso, e obter a seqüência fora desse char [].
Eu sou novo para este tipo de não gerenciado codificação.
Solução
Provavelmente você deve declará-lo como ByValTStr
(dependendo da natureza da corda, que poderia ser diferente):
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DISPATCH_MESSAGE{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string federation_name;
}
UPDATE: Se ele já está dando um char[]
, é provavelmente fazendo a conversão necessária (inclui codificação de manipulação) corretamente, então eu acho que você só precisa:
string str = new string(instance.federation_name);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow